分享
 
 
 

在VB应用软件中实现动画效果

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

余鑫铭

在开发VB应用程序中,加入了动画之后可使软件具有生动活泼的效果,而且,在编写组态软件中,动画功能更是必不可少,如容器中容量的变化、液体液面的变化等,实际也是一种动画效果。在中科院空间中心开发的“电场和电导率监测网中心站专家系统”中,有多处使用动画效果,现简明介绍如下。

一、使用Animation控件

在VB5.0中可以使用Animation控件实现动画,实例如下:

Private Sub Animation1_Click ()

With CommonDialog1

Filter = "avi (*.avi)|*.avi"

’过滤器指定在对话框的文件列表框中显示文件的类型

.ShowOpen

显示“打开”对话框

End With

With Animation1

.Autoplay = True

’一旦将 .avi 文件加载到 Animation 控件中,则 .avi 文件 将连续循环的自动播放。

.Open CommonDialog1.Filename

’打开一个将要播放的 .avi 文件。如果 AutoPlay 属性为 True,则只要加载该文件便可。

End With

End Sub

Animation 控件不能播放含有声音数据的 .avi 文件。此外,动画控件只能显示未压缩的或用行程编码 (RLE) 压缩的 .avi 文件。当用文件调用 Open 方法时,如果该文件含有声音数据,或不具备特定的压缩格式,则返回错误。

二、使用AniPushButton(AniButton)控件

受WINDOWS/NT超级终端动画效果的影响,笔者也希望在开发的应用软件中加入转动地球的效果。首先用PHOTOSHOP制作一些图画,地球的图像是用一个地球仪临摹取得的,每次将地球仪转动一个固定的角度,得到一幅不同角度地球的图像,重复多次,且将每一幅图存为一个.bmp文件,供AniPushButton调用。

AniPushButton控件包含了大量的属性、方法、事件供开发人员使用。首先在Picture和Frame属性中装入图像文件,Picture属性可以装入多幅图像文件,帧Frame属性是Picture属性装入图像文件的索引,Frame属性是1对应第一个图像文件,注意,Frame 只能从1开始,而图像数组可以从0开始,这两个属性可以在属性设计时设置,也可以在程序中设置,Picture属性可以装入.bmp、.ico、.wmf等文件,其他格式的图像文件可以用PHOTOSHOP或SEA等文件进行格式转换,在动画的图像文件装入时,不是装入一幅图像文件,而是要在Frame属性的控制下,装入多幅图像文件,Frame为1,Picture装入第一幅图像文件,Frame为2,Picture装入第二幅图像文件,依次类推,将可产生动画效果的各种图像依次装入Picture属性中。

PicDrawMode属性用于设置显示图像与装入图像之间的比例关系。0为控制按设计的大小装入图像,1为控制按图像的大小自动调整边框的大小,2为图像按控制的大小放大或缩小原图 Caption属性,为了不影响动画的效果,这里清空Caption属性。

Speed属性,表示动态切换每幅图的速度,以毫秒ms为单位,值越大,切换速度越慢。

SpecialOp属性,该属性在设计时无效,只有在程序运行时软件设置,为1时,表示模拟鼠标的Click操作,不由用户操作触发,而由系统自动触发动画按钮,使控制执行Click功能,在下面的软件中使用定时器来激活该功能。在下面的程序中,用到的一些参数值,包括Picture和Frame都是在程序中设置的,不是在属性对话框中设置的。

Private Sub Form_Load()

With timer1 设定时器属性

.Enabled = False

.Interval = 600

End With

With AniPushButton1 ’设AniPushButton1各属性

.Enabled = True 激活

.Cycle = 0

.Caption = ""

.PictDrawMode = 1 按图像的大小自动调整

.Speed = 200 帧切换速度

.Frame = 1 用LoadPicture方法给Picture属性赋值

.Picture = LoadPicture("c:\earth1.bmp ")

.Frame = 2

.Picture = LoadPicture("c:\earth2.bmp")

.Frame = 3

.Picture = LoadPicture("c:\earth3.bmp")

.Frame = 4

.Picture = LoadPicture("c:\earth4.bmp")

.Frame = 5

.Picture = LoadPicture("c:\earth5.bmp")

End With

End Sub

Sub Cmd_Start_Click () 开始命令按钮启动定时器

timer1.Enabled = -1

End Sub

Sub Timer1_Timer ()

AniButton1.SpecialOp = 1 实现鼠标的Click操作

End Sub

三、使用PictureClip控件实现动画

该控件提供了存储多个图像信息的技术,其访问方式不是向AniPushButton依次切换每幅图像,而是先将多幅图像依次有序存放在一个.bmp文件中,.bmp中的图像将被均匀分割成许多小块,每一块作为动画切换的一幅图。

下面的程序将实现一个转动陀螺的动画效果。

在程序的声明段定义变量:

Dim y As Integer

Dim toggle As Integer

Private Sub Form_Load()

picture1.Picture = PictureClip1.

GraphicCell(0) 使用第一幅为开始帧

y = 0

toggle=0

End Sub

Private Sub cmd_onoff_Click() 开关命令按钮

If toggle = 0 Then

cmd_onoff.Caption = "停止"

toggle = 1

Else

cmd_onoff.Caption = "旋转"

toggle = 0

End If

End Sub

Private Sub Timer1_Timer()

If toggle = 1 Then spin 满足条件,调图切换子程序

End Sub

Private Sub spin()

y = y + 1: If y = 17 Then y = 0

picture1.Picture = PictureClip1.

GraphicCell(y) 图切换一帧

End Sub

在上面的程序中,使用了命令按钮、图片控件、定时器和图像剪切控件等功能,其中最主要的是制作图像文件。图像文件制作分两个过程,首先制作单个的图像文件,然后,将这些图像文件合并成一个图像文件,存于一个.bmp文件中,在图像合成时可使用WINDOWS/95中的“画图”,用粘贴的方法完成。注意,在图像合成时,应设置状态栏参数以确定图像的精确位置,否则,在动画过程中,图像会出现跳动和不稳定感。

四、使用Image实现动画效果

该功能用定时器控件来控制移动和地球转动的速度,当然,其速度还与程序中设定的步长有关系,具体程序片段如下:

Private Sub Form_Load()

Timer_animate.inteval=100 INTEVAL属性为100ms

Timer_animate.enabled=true 启动动画定时器

End Sub

Private Sub Timer_animate_Timer()

Call ani_Image 定时调移动子程序

End Sub

Sub IncrFrame()

FrameNum = FrameNum + 1 帧加1

If FrameNum > 5 Then

最后一帧图像显示之后返回第一帧

FrameNum = 1

End If

Imageearth(0).Picture = Imageearth(FrameNum).Picture

将该帧图像赋给运动的Imageearth(0)控件的Picture属性

End Sub

Sub ani_Image() 控制移动子程序

Select Case Motion 控制移动方向的变量

Case 1 向上和向左移动,步长50 twips

Imageearth(0).Move Imageearth(0).

Left - 50, Imageearth(0).Top - 50

IncrFrame 切换到下一幅图

If Imageearth(0).Left < = 0 Then 向左移动到了边界

Motion = 2 向上和向右移动

ElseIf Imageearth(0).Top < = 0 Then

Motion = 4 向上移动到了边界,改向下和向左移动

End If

Case 2 向右和向上

Imageearth(0).Move Imageearth(0).Left + 50,

Imageearth(0).Top - 50

IncrFrame

到了右边界,转为向左和向上

If Imageearth(0).Left >= (startform.Width

- Imageearth(0).Width) Then

Motion = 1

ElseIf Imageearth(0).Top < = 0 Then

Motion = 3 向右向下

End If

Case 3 向右向下

Imageearth(0).Move Imageearth(0).Left + 50,

Imageearth(0).Top + 50

IncrFrame

If Imageearth(0).Left >= (startform.Width

- Imageearth(0).Width) Then

Motion = 4 向左向下

ElseIf Imageearth(0).Top >=

(startform.Height - Imageearth(0).Height) - 680 Then

Motion = 2 向右向上,其中680 twips是标题和菜单的高度

End If

Case 4 向左向下

Imageearth(0).Move Imageearth(0).Left - 50,

Imageearth(0).Top + 50

IncrFrame

If Imageearth(0).Left < = 0 Then

是否到了左边界,如到了转向右向下

Motion = 3

是否到了下边界

ElseIf Imageearth(0).Top >= (startform.Height

- Imageearth(0).Height) - 680 Then

Motion = 1 向左向上

End If

End Select

End Sub

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有