视听在线 图片中心 职教博客 职教论坛 信息查询 网络办公 同学录 免费邮箱

栏 目 导 航

科教专题
创作常识
教育论文
学科研究
科教成果
文书范本
师生风采
现代远教
校园文学
朝阳文学社
青春寄语
人文素材
精典论述
散文欣赏
缤纷诗语
精品小说
笑破肚皮
学习培训
课堂教学
信息技术
等级考试
升学考试
教师技能
试题中心
教案课件

 

网 站 统 计
学校概况:89 篇学校概况
新闻中心:206 个新闻
教学教研:457 篇教学教研
德育工作:87 个德育
视听在线:125 篇视听节目
图片:93 张图片
下载:95 个下载
注册会员:10111位
最 新 调 查
 没有任何调查

 

 

您现在的位置: 南江县职中(三中) >> 教学教研 >> 学习培训 >> 信息技术 >> 程序设计 >> VFP数据库 >> 教学教研正文
 搜索

高级搜索

  • 上一篇教学教研:
  • 下一篇教学教研:
  • 在Visual FoxPro中设计豪华封面

    作者:caihz    教学教研来源:本站原创    点击数:    更新时间:2007-12-12

    当你历尽千辛万苦写完一个应用程序后,肯定是希望它倍受欢迎;一个既有美感又有动感的漂亮封面定会令你的软件魅力倍增。设计封面的一般做法是借助3DS、PowerPoint、3DCool等工具制作一个可执行文件,然后挂接在你的程序中。这样做固然好,但也有不少缺点,比如会使你的软件变得臃肿,连接有痕迹,效果不够理想灵活等。下面介绍的是笔者在Visual FoxPro下设计封面的一些心得,主要探讨的是如何通过编程的手段来实现动画效果,原理很简单,实现也比较容易,相信对各位同行会有一定的启发作用。
    ---- 在Visual FoxPro中有个叫定时器(计时器)的控件(Timer控制),它能按一定的时间间隔规则地执行代码,是实现动画效果的“法宝”。 Timer控制有个属性Interval用来指定计时器控制的 Timer 事件之间的时间间隔毫秒数,一般将这个属性值设为10,也就是说每隔10毫秒,将会触发一次计时器的Timer 事件;在Timer 事件中写上有条件地改变某个控件的Height、Width、Top、Left、Visible等等属性的代码,就能让这个控件按我们的要求动起来。

    ---- 我们借助PowerPoint的一些术语来具体看看各种效果的实现方法:

    ---- 一、 缓慢移入和飞入:

    ---- 这是最容易实现的一种,只需要编程改变控件的Top或Left属性即可。例如,现有一个名为Form1的表单里,已经建立了一个名为Image1的图象控制,此控件的Picture属性已设好,想让这幅图片从底部缓慢移入屏幕,要做那些工作呢?首先,将Image1的Top属性设为450(或根据你屏幕设置改为别的数字),也就是说,让图片的顶部刚好位于屏幕的下边界;然后,建立一个名为Timer1的计时器,并将Timer1的Interval属性设为10;接着,在Timer1的Timer事件中,写上几行这样的代码:

    stayposition=100
    speed=3
    If Thisform.Image1.top

    ---- 其中,变量stayposition用于控制图片最后停留的位置,变量speed用于控制图片的移动速度。运行这个表单,将会看到一幅图片以你需要的速度,从屏幕底部出发,一直移动到你所需要的位置,然后停下来。如果你想程序运行时,要有一定的动作(例如单击屏幕),图片才开始移动,我们可以先把Timer1的Enabled属性设为.F.,然后在Fomr1的Click事件上写上代码:Thisform.Timer1.enabled=.T.即可。

    ---- 当你真正理解底部缓慢移入的原理和实现方法时,所谓的底部飞入、从右下角缓慢移入、从顶部飞入、从右侧飞入等等效果就轻而易举了,这里简单地说一下:飞入,将speed的值改大即可;从顶部移入,稍为复杂一点,要将语句If Thisform.Image1.top”,并将语句Thisform.Image1.top=Thisform.Image1.top-speed中的“-”改为“+”,还要修改图片初始的top属性,让图片开始时是处于屏幕的顶部;从右侧移入,需要修改图片的初始left属性,并将上面程序中的所有top改为left;而从左上角、右下角等处斜斜移入,则在程序中需要同时改变图片的top和left属性。不过,所有这些的道理都是一样的。

    ---- 二、 切入:

    ---- 以右侧切入为例。这种效果看起来是从右到左将图片拉来出来。实现的方法是:先将图片的width属性设为0;建立并设好计时器控件;在计时器的timer事件中写上如下代码:

    stopwidth=170
    speed=12
    If Thisform.Image1.width >stopwidth then
      Thisform.Timer1.enabled=.F.
    Else
      Thisform.Image1.width=Thisform.Image1.width+speed
      Thisform.Image1.left=Thisform.Image1.left-speed
    Endif

    ---- 这里,变量stopwidth的值等于图片的原始宽度。同理,上侧切入的效果只需将上述代码中的width改为height,将left改为top,并将图片的height属性设为0即可。但由于VFP的一些限制,左侧切入和下侧切入的效果比较难于实现。

    ---- 三、 擦除:

    ---- 向右擦除的效果与从右侧切入非常相象,只是向右擦除看起来是将图片从左往右摊开,而从右侧切入看起来是将图片从右往左拉出来。它们的实现方法也几乎一样,仅将语句Thisform.Image1.left=Thisform.Image1.left-speed去掉就行了。同样,向上擦除也是类似的,但向左、向下擦除的效果不易实现。

    ---- 四、 伸展:

    ---- 伸展跟切入的效果的区别在于:伸展过程中,整幅图片都能看见,不过是变了形的;而切入的过程中,只能看见图片的一部分。伸展与切入的实现也几乎完全相同,唯一的改动是将图片的stretch属性设为2(等比填充)。同样,其它方向的伸展也是类似的。

    ---- 五、 闪烁:

    ---- 这个效果很容易实现。建立计时器,根据你所需要的闪烁速度设好它的Interval属性,一般可设成500。在计时器的timer事件中写上如下代码:

    if  thisform. Image1.visible=.f. then
       thisform. Image1.visible=.t.
    else
       thisform. Image1.visible=.f.  
    endif

    ---- 图片Image1就能按你的需要闪烁起来,想停止闪烁,将计时器的enabled属性设为.f.即可。

    ---- 六、 百叶窗:

    ---- 这个效果要实现比较复杂,我们先看水平百叶窗。首先,在图片上面建几个白色的空白横条标签,刚好能将图片盖住,这些标签的名字分别取成“label1”、“label2”……;然后建立并设好计时器控件,并在计时器的timer事件中写上如下代码:

    speed=3
    number=5
    if  thisform.label1.height >=speed then
    for i=1 to number
          j=str(i,int((int(i/10)+9)/10)+1)
          thisform.label&j..height=
          thisform.label&j..height-speed
    next i
    endif

    ---- 其中,变量speed用于控制图片出现的速度,number表示标签的个数。一般来说标签的height属性要设成speed的倍数,而语句j=str(i,int((int(i/10)+9)/10)+1),是用于根据i的值来确定字符j的长度,避免出错。至于垂直百叶窗效果,将水平百叶窗效果中的横条标签变成竖条标签,再将代码中的所有height改为width即可。

    ---- 七、 棋盘式:

    ---- 棋盘式的实现方法几乎和百叶窗一样,只是空白标签盖在图片上面的方式不同。在棋盘式中,要先建立许多个标签,但这些标签并不完全把图片遮住,而是设计成国际象棋的棋盘那样,一个格上放标签,另外一个格露出图片,标签依然取名为“label1”、“label2”……代码则和百叶窗中的完全相同。

    ---- 八、 回旋:

            表面看来,回旋这种效果是图片在绕着一根轴在旋转,但实际我们可以通过改变图片的width属性来实现这种效果。这时最好建立两个计时器,分别命名为timer1、timer2;timer2用于控制减少图片的宽度,其timer事件的代码为:

    speed=4
    if  thisform.image1.width<=speed then thisform.timer1.enabled=".t." thisform.timer2.enabled=".f." else thisform.image1.left="thisform.image1.left+speed/2" thisform.image1.width="thisform.image1.width-speed" endif timer1用于控制增加图片的宽度,其timer事件的代码为: imagewidth="200" speed="4" if thisform.image1.width>=imagewidth    then
        thisform.timer1.enabled=.f.
        thisform.timer2.enabled=.t.
    else
        thisform.image1.left=thisform.image1.left-speed/2
        thisform.image1.width=thisform.image1.width+speed
    endif

    ---- 其中,变量speed控制回旋的快慢,值要求是偶数, imagewidth代表图片的原始宽度,图片的strecth属性要设成2-变比填充。想停止回旋,将timer1和timer2的enabled属性都设为.f.即可。

    ---- 九、 放大缩小:

    ---- 这种效果虽然看起来与回旋相差甚远,但实现方法却与回旋几乎一样,只需要把图片的strecth属性改为1-等比填充即可,代码不必做任何改动。

    ---- 十、 变色:

    ---- 变色效果一般只应用于文字。变色有许许多多的方式,这里介绍的是随机方式。建立标签对象label1,设好其caption属性;建立计时器,其Interval属性根据需要而设,一般可设为500,在timer事件中写上代码:

    i=int(rand()*255)
    j=int(rand()*255)
    k=int(rand()*255)
    thisform.label1.forecolor=rgb(i,j,k)

    ---- 以上是本人在使用VFP6.0编程中所积累的一点粗浅经验,使用上述方法所设计出来的软件封面的确堪称豪华。其实,只要懂得了原理,我们可以尽情发挥想象力,设计出各种各样的漂亮效果。而且这个道理还可以应用于VB编程。最后,需要补充的一点是,如果想为你的效果增添一点声音,请加上代码:
    SET BELL TO '你需要的声音.WAV', 0
    ?? CHR(7)

    教学教研录入:CaiHZ    责任编辑:CaiHZ 
    发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
  • 上一篇教学教研:
  • 下一篇教学教研:
  •  

    设为首页加入收藏联系站长友情链接版权申明关于我们

    本站版权所有:四川省南江县职业中学(南江三中)[C2004-2006] 【蜀ICP备05026437号】
    地址:四川省南江县南江镇光雾山大道香山路66号,电话:0827-8280443 EMail:scnjsz@126.com,传真:08278281138
    本站设计:蔡怀周,QQ:372051855   校友QQ群:11428533 7289410 18990001

    最佳浏览设置:1024×768、16位真彩色以上