动态创建对象实例
对非可视的系统对象类型使用CREATE 语句创建对象实例实例生成后就可以使用点运算符. 引用对象的成员了CREATE 语句返回对象实例的句柄通过该句柄引用新生成的实例CREATE
语句有两种语法格式
语法一
objectvariable = CREATE objecttype
其中objectvariable 是数据类型为objecttype 的变量可以是全局变量实例变量
或局部变量objecttype 是对象数据类型
语法二
objectvariable = CREATE USING objecttypestring
其中objectvariable 是个变量可以是全局变量实例变量或局部变量其数据
类型要与将创建对象的类或该类的祖先类相同objecttypestring 是个字符串其值是要创
建对象类数据类型的名称
例如下面的语句创建一个事务对象实例
transaction DBTrans
DBTrans = CREATE transaction
DBTrans.DBMS = 'ODBC '
第二种语法格式可以在应用程序中动态选择对象类型并创建其实例例如假设uo_a_desc1 uo_a_desc2 都是uo_a 的继承对象则在应用程序中可使用条件语句实现对不同继承对象的实例化比如
uo_a uo_a_var
string ls_objectname
IF ... THEN
ls_objectname = "uo_a_desc1 "
ELSE
ls_objectname = "uo_a_desc2 "
END IF
uo_a_var = CREATE USING ls_objectname
需要注意的是CREATE 语句只能用于创建非可视对象,可视对象的实例使用合适的OPEN 函数创建
OpenUserObject()
功能:
打开用户对象并在指定位置显示用户对象之后代码中就可以使用该用户对象的属性函数以及事件了与其他Open 类函数OpenUserObject()
也有两种语法格式语法一打开设计程序时已知数据类型的用户对象语法二打开程序设计时未知类型或需要动态更换的用户对象下面分别予以
介绍.
语法:一打开设计程序时已知数据类型的用户对象
语法:windowname.OpenUserObject ( userobjectvar {, x, y } )
参数:windowname 要在其上显示用户对象的窗口的名称userobjectvar 要显示的用户对象的名称可以指定用户对象画笔中定义的用户
对象名也可以是指定用户对象的变量名OpenUserObject()函数将打开的用户对象的引用放置在该参数中
x 可选项指定用户对象左上角在窗口上的X 显示位置以PBU 为单位默认值为0
y 可选项指定用户对象左上角在窗口上的Y 显示位置以PBU 为单位默认值为0
返回值:Integer 函数执行成功时返回1 发生错误时函数返回-1 如果任何参数的值为NULL 则OpenUserObject()函数返回NULL
用法:在应用程序访问用户对象的属性之前必须首先打开用户对象否则将引发应用程序运行错误但是如果在定义窗口时已经把用户对象放置,在窗口上那么这样的用户对象就不需要再在代码中打开了PowerBuilder 在打开窗口的同时会自动打开所有已经放置在窗口上的用户对象,OpenUserObject()函数在打开用户对象的同时也将把该用户对象的引用添加到窗口的Control 属性数组中使用OpenUserObject()函数,打开用户对象后在关闭放置该对象的窗口时PowerBuilder 并不会自动删除该用户对象它依然占用着系统资源应用程序需调用,CloseUserObject()函数来删除用户对象以释放用户对象占用的资源,OpenUserObject()函数创建用户对象后系统在更新显示或执行该函数的代码段运行完毕时显示用户对象比如如果应用程序在某个事件处理,程序中打开了几个用户对象那么这些用户对象将在该事件处理程序执行完毕后同时显示在屏幕上如果想每创建一个用户对象就在窗口中显示,一个用户对象那么可以这样做在每条OpenUserObject()函数之后执行一个更新窗口或窗口上可视控件外观属性的语句比如修改窗口的标题,等OpenUserObject()函数与打开窗口的Open()函数十分相似当应用程序重复执行语法一的OpenUserObject()函数多次时它只打开一个用户对象实例而激活用户对象多次但不是打开多个用户对象实例.
示例:
下面的代码在窗口w_test 的100, 500 位置打开并显示可视用户对象uo_test
uo_test 在用户对象画笔中定义并保存在应用库中
w_test.OpenUserObject ( uo_test , 100, 500 )
语法二:打开程序设计时未知类型或需要动态更换的用户对象
语法:windowname.OpenUserObject ( userobjectvar, userobjecttype {, x, y } )
参数:windowname 要在其上显示用户对象的窗口的名称
userobjectvar DragObject 类型的变量OpenUserObject()函数将打开的用户对象的引用放置在该参数中
userobjecttype string 类型其值为要显示用户对象的名称该对象必须是
userobjectvar 对象的子孙对象
x 可选项指定用户对象左上角在窗口上的X 显示位置以PBU 为单位默认值为0
y 可选项指定用户对象左上角在窗口上的Y 显示位置以PBU 为单位默认值为0
返回值:Integer 函数执行成功时返回1 发生错误时函数返回-1 如果任何参数的值为NULL 则OpenUserObject()函数返回NULL
用法在应用程序访问用户对象的属性之前必须首先打开用户对象,否则将引发应用程序运行错误,但是如果在定义窗口时已经把用户对象放置在窗口上,那么这样的用户对象就不需要再在代码中打开了,PowerBuilder在打开窗口的同时会自动打开所有已经放置在窗口上的用户对象。OpenUserObject()函数在打开用户对象的同时也将把该用户对象的引用添加到窗口的Control属性数组中。使用OpenUserObject()函数,打开用户对象后在关闭放置该对象的窗口时,PowerBuilder并不会自动删除该用户对象,它依然占用着系统资源应用程序,需要调用CloseUserObject()函数来删除用户对象释放用户对象占用的资源。OpenUserObject()函数创建用户对象后,系统在更新显示或执行该函数的代码段运行完毕时,显示用户对象,比如,如果应用程序在某个事件处理程序中打开了几个用户对象,那么这些用户对象将在该事件处理程序执行完毕后同时显示在屏幕上,如果想每创建一个用户对象就在窗口中显示一个用户对象,那么可以这样做在,每条OpenUserObject()函数之后执行一个更新窗口或窗口上可视控件外观属性的语句,比如更改窗口的标题等。
当应用程序执行语法二格式的OpenUserObject()函数时,PowerBuilder打开由参数userobjecttype指定类型的用户对象,并将对该对象实例的引用放置在参数userobjectvar中,应用程序可通过变量userobjectvar在代码中操作打开的用户对象userobjecttype,参数指定的用户对象并不会自动包含到你的可执行文件中,要想在应用程序中包含该对象必须把它保存在PBD文件、PowerBuilder动态链接库中并与你的应用程序一起发行该动态链接库。
示例下面的代码在窗口w_test 的100, 500 位置打开并显示可视用户对象uo_test
uo_test 在用户对象画笔中定义并保存在应用库中iuo_test 是uo_test 类型的实例变量
w_test.OpenUserObject ( iuo_test, "uo_test ", 100, 500 )