PowerBuilder可视化用户对象在线教程
11.1 简介
对象是面向对象程序设计的核心概念。一个对象可以拥有若干属性,以及一系列的对这些属性进行操作的方法。一个对象可以通过若干个接口同其它的对象进行相互的作用,共同完成一项工作。当对象被定义好之后,它就拥有了活力,就能够完成一定的功能。我们给出一个对象的定义之后,就可以根据需要多次使用,而不需要做任何额外的工作,这就大大提高了脚本的重用性和易维护性。POWER BUILDER 提供了用户对象这个特性,很好的支持了对象化程序设计。下面我们就具体介绍如何在POWER BUILDER中定义和使用用户对象。
POWER BUILDER 中有两种用户对象,一种是可视的用户对象,一种是类用户对象。下面我们先介绍可视用户对象。
所谓可视用户对象就是可重用的具有某种行为的一个或一组控件。下面举一个例子,定义一个用户对象。首先单击POWER BAR 上面的用户对象画板按钮,屏幕上弹出用户对象选择对话框。如图11-1。
图11-1
图11-2
单击NEW按钮,新建一个用户对象。系统要求我们选择用户对象的类型。如图11-2。
下面的VISUAL组框表示建立可视类型的用户对象,CUSTOM图标表示定制类型,定制的可视化用户对象是具有多个控件的对象,它们作为一个整体来发挥作用。
STANDARD图标表示标准类型的可视化用户对象,它是通过继承一个标准类型的POWER BUILDER控件来定义的。我们可以通过修改其定义使之适应程序设计的要求。
EXTERNAL图标表示外部可视用户对象,它的定义来自基于WINDOWS操作系统的POWER BUILDER 系统之外的对象,比方说,如果您准备了一个WINDOWS动态链接库,那么就可以使用它在POWER BUILDER 中建立一个外部的可视化用户对象。
上面的CLASS组框表示要建立类用户对象,其中也包括定制和标准两种,它们的含义与刚才介绍的可视化用户对象的对应部分大致相同,在后面的内容当中,我们将加以详细地介绍。
图11-3
单击VISUAL 组框中的STANDARD按钮,建立一个标准类型的用户对象。接下来选择继承哪一种标准控件。这个列表框当中列出了POWER BUILDER 中支持的所有标准控件,选择PICTURE图片控件加以继承。然后单击OK按钮。如图11-3。
下面就用户对象画板的工作区。我们看到上面有一个图片控件。在它上面单击鼠标右键,弹出菜单,选择SCRIPT命令,开始编写脚本。编写用户对象的脚本要处理的一个重要问题就是解决用户对象和拥有它的窗口之间的通讯问题。一般的情况之下,我们有两种选择:使用函数,或者使用用户事件。
所谓用户事件就是在POWER BUILDER标准事件以及WINDOWS标准事件之外,由用户自己定义的事件。下面我们示范如何定义和使用用户事件。
图11-4
选择DECLARE的USER EVENT命令,定义一个用户事件。如图11-4。
图11-5
在EVENT NAME 一栏当中可以敲入事件的名称,在EVENT ID一栏当中可以敲入事件的ID号,不过如果您定义的用户事件与WINDOWS标准消息无关的话,可以忽略这个命令ID号。单击OK按钮结束定义。如图11-5。
在脚本画板的工作区当中,单击SELECT EVENT事件选择列表框,我们看到ALTERPIC 这个用户定义的事件已经出现在列表当中了。如图11-6。
图11-7
下面的工作当中,我们将会用到一个全局变量。如何定义一个全局变量呢?选择DECLARE菜单当中的DECLARE GLOBAL VARIABLES 命令,在POWER BUILDER弹出的全局变量定义对话框当中输入变量的定义,单击OK按钮,就完成了定义。如图11-7。
在这个事件的脚本当中我们还将使用一个结构。什么是结构呢?结构就是相关变量的集合,结构的相关变量被称为结构属性。结构可以分为全局级和对象级两种,这里我们定义一个对象级的结构,用来保存几个字符串。
定义结构的方法非常的简单。选择DECLARE中的USER OBJECT STRUCTURES命令,系统弹出结构选择对话框,单击NEW按钮,新建一个结构。在VARIABLE NAME 一栏当中输入变量的名字,选择变量的类型。输入需要的变量之后,关闭结构定义画板。如图11-8。
图11-9
系统将会提示我们保存这个结构,选择“是”按钮,给结构取一个名字,定义结构的工作就完成了。如图11-9。
如何在程序中使用这个结构呢?一个结构就是一个新的数据类型,在使用之前必须实例化。这句脚本的意思就是生成一个结构的实例。
strucPictureName name
我们可以使用点操作符给结构的变量赋值。
name.pic1 = "1.bmp"
name.pic2 = "2.bmp"
name.pic3 = "3.bmp"
name.pic4 = "4.bmp"
name.pic5 = "5.bmp"
name.pic6 = "6.bmp"
name.pic7 = "7.bmp"
这段脚本的意思是根据全局变量的值从结构变量当中取出合适的值来改变图片控件的属性。
CHOOSE CASE picnum
case 1
this.picturename = "1.bmp"
case 2
this.picturename = "2.bmp"
case 3
this.picturename = "3.bmp"
case 4
this.picturename = "4.bmp"
case 5
this.picturename = "5.bmp"
case 6
this.picturename = "6.bmp"
case 7
this.picturename = "7.bmp"
END CHOOSE
图11-10
单击POWER BAR上面的RETURN按钮,关闭工作区。关闭用户对象定义工作区。单击“是”按钮确认保存这个用户对象,为这个对象取名字。单击OK按钮。如图11-10。
接下来,打开一个窗口,单击控件布置按钮,弹出控件列表,单击USER OBJECT按钮,系统弹出用户对象选择对话框,在列表中选择刚才定义的控件,选择然后在窗口上单击鼠标左键,布置这个控件。如图11-11。
在窗口上面单击鼠标右键,弹出菜单,选择SCRIPT命令。在事件选择列表当中选择OPEN事件,在其中加入一段代码。
Timer(0.5)
它的意思是在窗口打开的时候,设置该窗口的定时器触发时间间隔为半秒钟。设置然后选择窗口的TIMER定时器触发事件。加入这样的代码。
p_1.TriggerEvent("alterpic")
它的意思是当定时器计时已满事件触发的时候,程序触发我们刚才定义的用户事件。
这样就完成了窗口和用户对象的接口定义。关闭脚本画板工作区。关闭窗口画板工作区。
从上面的例子当中,可以看出使用用户对象的便利之处。