[返回]
计算机世界1997年第42期

PowerBuilder中的用户对象

中国科学院软件研究所  杨正洪

PowerBuilder(以下简称PB)是图形界面的客户 /服务器应用程序开发环境。PB实现了面向对象(OO)的技术,如:类的封装性、继承性、多态性、重用性等。作为开发人员,对于重复使用的组件,应该定义用户对象。

PB提供了两种类型的用户对象,即:可视用户对象和类用户对象。下面以PB中的techniq ues application的abnc order entry应用为例来阐述用户对象。

可视用户对象

可视用户对象是具有某些功能的一个或一组控件(该控件可能是标准的PB控件,可能是外部的对象,也可能是VBX等等)。可视用户对象总共有4类,分别如下:

1.标准可视用户对象

标准的可视用户对象是继承一个标准PB控件的定义,然后修改定义使控件具有用户要求的功能。例如:你经常使用一个名为close的按钮来完成以下功能:显示确认框,选择ok则退出 ,选择cancel则不退出。那么,你可做如下用户对象:选择commandbutton标准可视类型,并且声明如下clicked事件。

/*clicked事件 目的:确认退出*/

integer li—choice

li-choice=messagebox("退出确认","确实要退出"+&+"吗?",question!,okcancel!)

if li—choice<>1 then return

Close(parent)

2.定制可视用户对象

定制的可视用户对象是将几个控件组合成一个整体,然后修改定义使控件具有用户要求的功能(可通过编写每个控件的脚本完成)。例如:你经常使用下图的日历(见左下图,左边是显示的日历,右边是控制显示的属性,如:是否高亮显示周末等),那么,你可以做如下用户对象 :选择一个OCX(通过OLE放在用户对象中)、一个groupbox、三个checkbox,并且声明如下cli cked事件。

/*month buttons的Clicked事件 目的:是否显示滚动按钮*/

IF this.checked=true THEN

 ole—calendar.object.MonthButtons=true

 /*raised look的Clicked事件 目的:是否在日历上凹

 /凸天*/ IF this.checked=true THEN ole—calendar.object.DateBorder=2 //凸出

ELSE

  ole—calendar.object.DateBorder=3 //凹

END IF

/*weekend highlight的clicked事件

目的:是否在日历上将周末高亮显示*/

IF this.checked=true THEN

 ole—calendar.object.WeekendColor=RGB(0,255,255) //高亮

ELSE

 ole—calendar.object.WeekendColor=RGB(192,192,192) //不高亮

END IF

3.外部可视用户对象

外部可视用户对象是指其内包含的控件是PB系统之外的对象,如DLL等。由于开发时较少使用,这里不再详述。

4.VBX可视用户对象

VBX可视用户对象是指其内包含的控件是VBX控件。开发者要注意的是,PB5.0仅支持Ver sion1.0。因开发时较少使用,这里也不再详述。

类用户对象

编制类用户对象,在面向对象的范畴中,就是编制类。在面向对象中,类由属性和方法组成。定义属性就是定义数据组成,定义方法就是定义函数。同样,编制类用户对象就是定义实例变量(作为属性)和定义用户对象函数(作为方法)的过程。类用户对象总共有两类,分别如下:

1.标准类用户对象

标准的类用户对象是继承PB内部不可视对象(如:ERROR等),然后修改定义使对象具有用户要求的功能。例如:下面的例子继承了事务对象,可以修改它的定义(如:添加实例变量和函数)。当定义标准的类用户对象完成,应该将它添加到应用画笔中的variable types中,以便代替原来的对象。

2.定制类用户对象

定制的类用户对象就是用户自己指定实例变量和函数。例如:下面创建了类用户对象:u —activity—manager。它的作用是,设定整个w—activity—manager窗口的环境(如:颜色、字体等)和其内的组件。

string is—inifile-name         //INI文件名,用于初始化

string is—appname //所属应用名

string is—appversion //应用版本

string is—Windowcolor //Widnows背景色

string is—activity-textcolor //文本色

string is—activity-textsize //字体大小

*用户对象函数(仅列出部分):

uf-get-properties() /*从指定的INI文件中初始化实例变量*/

uf-apply-properties() /*由实例变量的值来设定整个窗口的属性*/

uf—save—properties() /*将实例变量的值存入INI文件*/

以上叙述了PB的用户对象,开发者也可以参考code examples中的例子程序来体会用户对象的概念和使用方法。