用PowerBuilder制作多媒体动画
#1 一、实现原理
通过PB工具栏的控件按钮在窗口中放入一个图片控件,因为在动画序列的每一阶段都需要一幅标准的位图图片。通常在应用程序的请求之下,Microsoft Windows会在固定的时间间隔发送事件消息。利用PowerBuild的Timer()函数,可以打开这个定时器,从而窗口可在每个间隔内收到一个Timer()事件。当窗口收到消息时,改变图片控件的属性以显示动画系列中一幅不同的帧。当窗口关闭时,须告知Windows停止发送Timer事件。
#1 二、操作步骤
1.打开Application画板,创建一个新的应用库和相应的应用程序对象,分别叫做animate.pbl和animate。当提示是否生成应用程序模板时,回答No。
2.使用Windows画板创建一个新窗口。
点击Windows画板,弹出Select Windows窗口,点按“New”按钮建立一个新窗口。在新建窗口上按右键,选弹出菜单的“Properties...”,弹出Windows属性窗口,点General页,在Windows Type的下拉列表中任选一种类型,如Response,接着设置窗口的属性Visible和Enabked为TRUE,其它属性都设为FALSE,最后以w_animate为窗口名存盘。
3.在窗口中添置图片控件
点按Picture控件按钮,并将其命名为P_1并设置File Name为“lxscr000.BMP”。为了在显示位图时得到更好的执行效果,设置图片控件的OriginalSize属性为TRUE。
4.为w_animate窗口定义实例变量,以便程序在脚本的执行期间内用来保存值。
点击菜单declare中的Instance Variables菜单项,作如下变量声明:
//所设的变量是一个数组,其中包含了为生成动画而显示的每一幅位图的文件名,它将为窗口提供一系列图像并循环显示
string is_bitmaps[]={″lxscr000.bmp″,″ lxscr001.bmp″,″ lxscr002.bmp″,″ lxscr003.bmp″,″ lxscr004.bmp″,″ lxscr005.bmp″}
//用于跟踪当前的位图数,初始值为1指示第一张图片
integer ii_picture=1
//可得到的最大位图数
integer ii_maxpicture
5.初始化程序,以使窗口得到循环显示的位图数,同时设置要显示的第一幅位图以及安排Timer事件的发生。
在w_animate的open事件中编写如下代码:
//获取数组变量中的最大位图数
ii_maxpicture=UpperBound(is_bitmaps[])
//设置位图显示初始值
p_1.picturename=is_bitmaps[ii_picture]
//每秒钟给w_animate窗口发送一个Timer事件
timer(1,this)
6.当窗口收到一个Timer事件后,它应该前进到序列中的下一帧。为Timer事件编写如下脚本。
if ii_picture=ii_maxpicture then
ii_picture=1
else
ii_picture=ii_picture+1
end if
p_1.picturename=is_bitmaps[ii_picture]
7.在窗口的Close 事件中编写如下代码使当窗口关闭时关掉Timer事件。
Timer(0,this)
8.编写脚本实现鼠标单击w_animate窗口时关闭该窗口。
在w_animate的clicked事件中键入close(this)。
9.编写脚本实现按任意键时关闭该窗口。
在w_animate的key事件中键入close(this)。
10.打开Application画板,按下面的方式处理应用程序的Open事件。
Open(w_animate)
11.保存并运行此应用程序。
#1 三、编程要点
1.Windows能够以每秒钟18次的速度发送Timer事件,并支持16个定时器同时运行,当不再使用时将定时器关闭是一个很好的习惯。
2.如果你想加快显示速度,可将第五步中Timer()函数的第一个参数改小,如0.5,反之改大。
这样在屏幕上就可得到一幅生动的多媒体动画。你可以根据自己的喜好随意更改循环显示的图片,也可把上述程序应用于任何窗口界面,为你的应用程序界面增添动感。示例中多媒体动画将一直持续显示,直到你用鼠标点击窗口或按下任意键。