PowerBuilder中图像的动态显示朱可云谭彦彬(基础部)摘要本文讨论了在PowerBuilder中动态显示图像的基本原理,并介绍了两种具体的方法,即利用图像控件动态显示图像的方法以及利用数据窗口动态显示图像的方法。关键词分类号PowerBuilder,事件(Event),脚本(Script)TN94111PowerBuilder是流行的数据库前端开发工具。在PowerBuilder实际开发应用中,开发者往往需要在应用中动态地显示图像。我们介绍了在PowerBuilder中实现动态图像显示的两种方法。通常,图像的动态显示,无非是在不同的时间点上,在同一位置显示不同的图像。因此以下两点是关键。(1)时间点的取得。这包括定时的实现,以及定时时间到能触发事件,在事件中执行用户程序。PowerBuilder提供了用于定时的定时函数timer(timetimeinterval),并且在其窗口组件(Window)中提供了timer事件。当窗口中的定时时间到时,该事件的脚本程序被执行。(2)图像的显示更新。即在定时时间到所触发的事件中,显示新图像。在PowerBuilder中,图像的显示有两种方法。一种方法是在窗口(Window)组件中放置一图像控件(Picturecontrol),图像控件可显示一幅BMP或RLE文件。另一种方法是在窗口(Window)放置一数据窗口(Datawindow)控件,利用数据窗口显示图像,同样可以显示一幅BMP或RLE图像。下面详细介绍这两种方法。利用图像控件动态显示图像1首先,在窗口中声明一Bolb类型的实例变量数组(选择菜单Declare中的InstantantVariable,本例中声明的是:Blobpblob6),用于存放图像文件;声明一整型(int)实例收稿日期:1997211212第一作者:男,1966年生,硕士,讲师—52—信息工程学院学报1998年(本例为pnum)用于表示图像序号。然后在窗口中放置一图像控件,并在窗口(设窗口名为W-dpicture)的ShowEvent中设置定时器,脚本如下://Script—Showforw-dpicturerealmytime//设置时间间隔1秒,即每秒更新一幅图像mytime=1Timer(mytime)在窗口的OpenEvent中读入所有的图像文件,存入一Blob数组。比如,欲循环显示6幅图像,文件名分别是f1.bmp,f2.bmp,f3.bmp,f4.bmp,f5.bmp,f6.bmp,则窗口的Open事件脚本如下://Script—Openforw-dpictureinti,i-fileFori=1to6Filename=“f”+String(i)+“1bmp”i-file=FileOpen(Filename,StreamMode!,Read!,LockRead!)FileRead(i-file,pblobiFileClose(i-file)Nextpnum=1)//读图像文件//第一幅图像//显示图像,P-1为窗口W-dpicture中图像控件名p-1.SetPicture(pblobpnum)要说明的是:当图像文件比较大(大于32765字节)时,图像文件的读入过程比较复杂,限于篇幅,不再详述,请参考有关资料。在窗口的TimerEvent中更新图像。即调用SetPicture()函数显示下一幅图像。//Script—TimerforW-dpicture//下一幅图像pnum=pnum+1Ifpnum>6Thenpnum=1Endifp-11SetPicture(pblobpnum)//若第六幅已显示,则显示第一幅//显示图像应当注意,为了不影响系统定时的精度,应在TimerEvent中执行尽可能少的脚本程序。因此,例子中Timer事件触发时,只是显示图像。图像是在窗口的Open事件中一次性读入,而不是在窗口的Timer事件中读入图像,再显示图像。利用数据窗口(DataWindow)动态显示图像2这种方法不需读入图像,比较简单,但它涉及了PowerBuilder中数据库和数据窗口组©1994-2013ChinaAcademicJournalElectronicPublishingHouse.Allrightsreserved.wwcnki—53—第2期朱可云等:PowerBuilder中图像的动态显示件。这种方法首先要在数据库中建一张表,将要显示的各图像的图像文件名(字符串)作为表的一列存于表中(表中另有一索引列,作为表的主键)。然后选择该表建立一数据源(DataSource)为SQLSelect的数据窗口(指定其提取数据的参数为表的索引列),并在该数据窗口(设其名为d-dpic)中指定该列的编辑风格(EditStytles)属性为图像属性(Dis2playedasPicture).这样,数据窗口在显示该列时,不是显示存入该列的字符串,而是以该列字符串为文件名,显示一幅图像。可见,PowerBuilder的数据窗口是可以显示图像的,当然也可以动态地显示图像。在窗口中放置一数据窗口控件(其名为dw-1),并把上述数据窗口(d-dpic)放入其中。在窗口的OpenEvent中加上如下脚本(加在最后)://Script—OpenforW-dpicturedw-1.SetTransObject(//...