|
17a2
p>在程序中有时为表示数据的复制,读取等时间软长时,应采用进度条来表示执行的状况,以免使用户才生程序死机以及运行速度慢的感觉,给用户一个比较好的用户界面。但在PowerBuilder6.0中并没有可以直接使用的进度条控件,在本例中我们通过定制可视用户对象的创建以及用户对象与窗口的通讯方法来实现进度条。 实现步骤如下:
1. 创建一个名为Customuo的用户对象,并将它保存在名为Customuo.pbl的应用库中;
2. 单击画笔栏的用户对象画笔图标,系统显示“Select User Object”对话框,单击“New”按钮,系统显示“New User Object ”对话框;
3. 通过单击选择“Visual”组框中的“Custom”选项,然后单击“OK”按钮进入用户对象画笔;
4. 在用户对象上放置三个静态文本框,将其依次命名为st_background、st_foreground、st_percent,分别用于显示进度条的背景、进度条当前进展以及进展的百分比表示。把它们的标题(对应于Text属性)全部删掉,保留为空白。用户对象本身的大小通过放置在窗口上的用户对象控件来控制;
5. 右击用户对象的空白部分(而不是其上的三个静态文本控件),从弹出菜单中选择“Script....."菜单项,进入代码编辑器;用户对象的。在事件列表框中选择Constructor事件,我们将对该事件编程,实现静态文本控件位置、大小的调整、边框设置等功能。具体代码如下:
//设置静态文本控件的高度、宽度
st_foreground.height=st_background.height
st_foreground.width=0
//设置静态文本控件位置
st_background.x=0st_background.y=0 st_foreground.x=0st_foreground.y=0
//设置边框风格
st_background.BorderStyle=StyleLowered!
st_foreground.BorderStyle=StyleLowered!
//改变用户对象的高度
This.height=st_foreground.height+st_percent.height+50
//修改进程条宽度
st_background.width=This.width
//设置显示百分比的静态文本控件位置
st_percent.y=100
st_percent.x=this.width/2 - st_percent.width/2
6. 从“Declare”菜单选择“Instance Variable....."菜单项,在打开的对话框中定义一个实例变量,它们的访问权限为Protected(Protect型变量的特性为:用户对象外的其它对象不能直接访问这些变量,只能通过对象函 捶梦剩庵址椒芄槐;ざ韵笾械闹匾荩饫锒ㄒ宓谋淞縤l_limit用于保存进度条对应的数值上界: Protected:
Long il_limit
7. 从“Declare”菜单选择“User Object Functions...”菜单项,我们定义名为SetProgress()的对象函数。该函数的功能是设置作为进度提示的静态文本控件st_foreground的宽度和静态文本控件st_percent上显示的百分比。这样通过不断调用该函数,可达到动态显示进程的效果。该函数有一个参数ai_value,数据类型为Integer,引用类型为Value。函数的返回值类型为(None)(无返回值)。函数代码为:
Integer li_percent
//设置st_foreground静态文本控件的的宽度,以指示当前完成进度st_foreground.width=st_background.width/il_limit *ai_value
li_percent=st_foreground.width/st_background.width*100
st_percent.text=String(li_percent)+"%"
Return
8. 按前面相同的方法,再定义一个对象函数SetColor(),这样其它对象就可以设置进度指针的颜色了。SetColor()函数有一个参数,数据类型为Long,引用类型为Value。函数的返回值类型为(None)(无返回值)。函数代码为:
//设置进度条颜色
st_foreground.BackColor=al_color
Return
9. 现在定义个设置进度条上界il_limit的函数SetLimit(),进度条将根据il_limit的值计算百分比。SetLimit()函数有一个参数,数据类型为Integer,引用类型为Value。函数的返回值类型为(None)(无返回值)。函数代码为:
//设置进度条的上界
il_limit=al_value
10. 单击用户画笔工具栏“Close”图标,系统显示保存对话框后将用户对象保存为cuo_progress;
11. 使用窗口画笔创建一个新窗口;将窗口标题设置为“用户对象演示”,将窗口类型选择为“Response”;然后从“Controls”菜单中选择“UserObject...."菜单项,系统打开"select User Object”对话框,选择cuo_progress,然后单击“OK”按钮关闭对话框;在窗口上单击,包含cuo_progress的用户对象控件被放置到窗口上;
12. 双击用户对象控件,打开该控件的属性对话框,在“Name”编辑框中键入该控件的名称“uo_progress”,并从“Border”下拉列表框中选择该控件的边框为“None”,然后单击“OK”按钮关闭对话框;
13. 在窗口上放置两个命令按钮,将其标题分别设置为“开 始”和“停止”。“开 始”按钮模拟执行过程,启动并推进进度条,“停 止”按钮随时终止模拟执行。 14. 从“Declare”菜单选择“Instance Variable.....”菜单项,说明三个实例变量,其中,ii_x和ii_y为Integer型,stop为boolean型
:Protected:
boolean stop
integer ii_x,ii_y
stop实例变量的作用是作为一个标志,当用户单击“停 止”按钮时,stop变量通知模拟执行过程用户希望终止执行;
15. 对“开 始”按钮的Clicked事件编写下述代码:
//初始时进度条处于非停止状态
stop=FALSE //设置进度条颜色
uo_progress.SetColor(RGB(255,0,0))
//设置进度条上界为100
uo_progress.SetLimit(100)
//用循环模拟一个执行过程
for ii_x=1 to 100for ii_y= 1 to 1000
//使其它控件有机会得到控制权
yield()
if stop then goto jumploopnext
uo_progress.SetProgress(ii_x)
next
jumploop:
代码中,RGB()函0数构造颜色值,Goto语句跳出循环。yield()函数出让系统控制权,这样系统才会在执行过程中响应用户单击“停 止”按钮操作,删除该语句。
16. 对“停 止”按钮的Clicked事件编写下述代码: stop=TRUE
17. 将窗口保存为w_progress; 在用户对象的Open事件中编写下述代码打开窗口:
//打开窗口
Open(W_progress)
18. 关闭代码编辑器,单击画笔栏的“Run”图标,应用程序开始运行。单击“开 始”按钮,一个红色的进度条自左向右延伸。延伸过程中单击“停 止”按钮随时停止进一步的模拟处
本例使用的关键是yield()函数使用以及讲解用户对象与窗口通信的是怎样实现 155
[办公软件]在sybase中插入图片、PDF、文本文件 [办公软件]安装Sybase ASE [办公软件]linux指令大全(完整篇) [办公软件]Linux新手入门常用命令大全 [办公软件]在RedHat Linux 9里安装gaim0.80 [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法 [办公软件]Linux程序员必读:中文化与GB18030标准 [办公软件]linux指令大全 [办公软件]制作Linux启动盘的四种方法 [办公软件]Linux文件系统的反删除方法
|