Database 版 (精华区)

发信人: starstar (星语心愿), 信区: Database
标  题: Visual FoxPro 5.0实现文字动画效果五例
发信站: 哈工大紫丁香 (2001年05月19日20:34:50 星期六), 站内信件

    
作为一种多媒体幻灯片制作软件,Microsoft PowerPoint 提供了几十种文字动画
效果,这些效果都是我们在使用Visual FoxPro编制多媒体程序时所梦寐以求的,
但是我们却无法在Visual FoxPro中直接使用它们。既然无法直接使用,何不进行
模拟制作呢?笔者对Microsoft PowerPoint的文字动画进行分析,发现大多数的效
果都可使用Visual FoxPro进行仿制。以下笔者精选了五种效果(笔者认为效果较
好且用途广泛的),所起名称均与Microsoft PowerPoint中名称相仿,有兴趣的读
者不妨一试,比较一下两者的效果。

    每种效果制作之前都需要建立好相应控件。首先建立一个新的表单(Form1)
,设置表单的Backcolor属性为RGB(192,192,192),然后在表单上建立四个标
签(Label1、Label2、Label3和Label4)和一个定时器(Timer1)。设置四个标签
的Caption(标题)属性分别为‘文’、‘字’、‘动’、‘画’,Backstyle属性
为0(透明),Fontsize属性为26,Autosize属性为.T.(自动调整大小);设置定
时器的Interval(定时间隔)为100,Enabled属性为.T.(不可用)。

文字逐个底部飞入 
Label1、Label2、Label3和Label4的Autosize属性为.T.,Alignment属性为0(左
边)。

Form1的Activate过程:

Public Top,Num

Num = 1

Top = Thisform.Label1.Top

For I = 1 To 4

LabelT = 'Label' + STR(i,1) + '.Top'

Thisform.&LabelT = Thisform.Height

Endfor

Thisform.Timer1.Enabled = .T.

Timer1的Timer过程:

LabelT = 'Label' + STR(Num,1) + '.Top'

If Thisform.&LabelT <= Top + 20

Thisform.&LabelT = Top

Num = Num + 1

If Num = 5

Thisform.Timer1.Enabled = .F.

Endif

Return

Endif

Thisform.&LabelT = Thisform.&LabelT – 20

文字逐个上部飞入 
Label1、Label2、Label3和Label4的Autosize属性为.T.,Alignment属性为0(左
边)。

Form1的Activate过程:

Public Top,Num

Num = 1

Top = Thisform.Label1.Top

For I = 1 To 4

LabelT = 'Label' + STR(i,1) + '.Top'

Thisform.&LabelT = - 30

Endfor

Thisform.Timer1.Enabled = .T.

Timer1的Timer过程:

LabelT = 'Label' + STR(Num,1) + '.Top'

If Thisform.&LabelT <= Top - 20

Thisform.&LabelT = Top

Num = Num + 1

If Num = 5

Thisform.Timer1.Enabled = .F.

Endif

Return

Endif

Thisform.&LabelT = Thisform.&LabelT + 20

文字逐个左侧切入 
Label1、Label2、Label3和Label4的Alignment属性为1(右边),Autosize属性为
.F.。

Form1的Activate过程:

Public Width,Num

Num = 1

Width = Thisform.Label1.Width

For I = 1 To 4

LabelW = 'Label' + STR(I,1) + '.Width'

Thisform.&LabelW = 0

Endfor

Thisform.Timer1.Enabled = .t.

Timer1的Timer过程:

LabelW = 'Label' + STR(Num,1) + '.Width'

If Thisform.&LabelW >= Width - 5

Thisform.&LabelW = Width

Num = Num +1

If Num = 5

Thisform.Timer1.Enabled = .F.

Endif

Return

Endif

Thisform.&LabelW = Thisform.&LabelW + 5

字符逐个阶梯状向右下展开 
Label1、Label2、Label3和Label4的Autosize属性为.F.,Alignment属性为0(左
边)。

Form1的Activate过程:

Public Height,Width,Num

Num = 1

Height = Thisform.Label1.Height

Width = Thisform.Label1.Width

For I = 1 To 4

LabelH = 'Label' + STR(i,1) + '.Height'

LabelW = 'Label' + STR(i,1) + '.Width'

Thisform.&LabelH = 0

Thisform.&LabelW = 0

Endfor

Thisform.Timer1.Enabled = .T.

Timer1的Timer过程:

LabelH = 'Label' + STR(Num,1) + '.Height'

LabelW = 'Label' + STR(Num,1) + '.Width'

If Thisform.&LabelH>=Height–5 OR Thisform.&LabelW>=Width-5

Num = Num + 1

If Num = 5

Thisform.Timer1.Enabled = .F.

Endif

Return

Endif

Thisform.&LabelH = Thisform.&LabelH + 5

Thisform.&LabelW = Thisform.&LabelW + 5

字符逐个阶梯状向左上收缩 
Label1、Label2、Label3和Label4的Autosize属性为.F.,Alignment属性为0(左
边)。

Form1的Activate过程:

Public Height,Width,Num

Num = 4

Height = Thisform.Label1.Height

Width = Thisform.Label1.Width

Thisform.Timer1.Enabled = .T.

Timer1的Timer过程:

LabelH = 'Label' + STR(i,1) + '.Height'

LabelW = 'Label' + STR(i,1) + '.Width'

If Thisform.&LabelH <= 5 or Thisform.&LabelW <= 5

Thisform.&LabelH = 0

Thisform.&LabelW = 0

Num = Num - 1

If Num = 0

Thisform.Timer1.Enabled = .F.

Endif

Return

Endif

Thisform.&LabelH = Thisform.&LabelH - 5

Thisform.&LabelW = Thisform.&LabelW – 5

以上的六例均是针对有4 个文字的情况编制的,若需显示多个文字可根据相应字数
进行修改或将其改为一个通用程序来使用。笔者的建议作法是将它们保存为‘类’
,并加以修改制作成一个通用类,如此便可在其它的程序中直接对其进行调用,一
劳永逸。

    以上程序均在Visual FoxPro 5.0和Windows 95中运行通过。


--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.239.32]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.802毫秒