骨骨头坏了:vfp界面特效设计技巧

来源:百度文库 编辑:中财网 时间:2024/07/03 12:41:58
vfp界面设计技巧(给初学者)

一、 缓慢移入和飞入:

在表单里,建立一个名为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)

如果想增添声音,请加上代码:

SET BELL TO '你需要的声音.WAV', 0
CHR(7)