动态创建对象实例

 
动态创建对象实例 

对非可视的系统对象类型使用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   )  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值