PB命令实例

//问题集
//The following question is from siisuo.uo_tabpg's key event
//1st 加入this是一个窗口,后面的参数是什么意思?
Send(Handle(This),256,9,long(0,0))
//2ed 第13行里面的ls_name为当前控件里面的text,怎么知道ls_name的前几个字段就是命令的编码字段?
If(ls_key<>"") Then
 For li_i=1 To UpperBound(This.control)
  If((This.Control[li_i].TypeOf()=CommandButton!) or &
    (This.Control[li_i].TypeOf()=PictureButton!)) Then
   CommandButton l_cb
   l_cb=This.Control[li_i]
   ls_name=l_cb.Text
   If(Left(ls_name,len(ls_key))=ls_key) and l_cb.enabled then
    This.Control[li_i].TriggerEvent("Clicked")
    Return 1
   End If
  End If
 Next
End If
//3th Constructor的作用


//变量命名规则:
G带头的为全局变量Global的意思;L带头的为局部变量Local的意思;I带头的为实例变量Instance的意思。
A带头的为函数的参数Argument。


//PB面向对象编程
PowerBuilder应用开发系列谈(3)
PowerBuilder面向对象的程序设计

在PowerBuilder的应用开发中,运用面向对象技术不是必须的,但是对于一个大型复杂应用系统的开发,如果采用了面向对象技术,则开发效率会大大提高。

用PowerBuilder开发的好处是,即使您不懂得什么是面向对象技术,您也可能会下意识地用到面向对象技术的一些特性,但是如果您对这一技术有了充分的了解,那对您所设计程序的可重用性,可维护性和其他各方面的质量都会有大幅度提高。
PowerBuilder的对象
PowerBuilder对象有三个部分元素:属性、函数和事件。
(1)属性:也就是数据。包括系统属性和用户定义属性两类,描述该对象的各种特性。如在窗口对象中的系统属性包括标题、高度、宽度等,用户定义的属性可以是实例变量或共享变量,对这种属性的访问同系统属性相同,只是在封装性上有所不同。
(2)事件:PowerBuilder中的事件与Windows的事件存在着映射关系。当用户的操作或系统本身产生了Windows的标准事件,就转化成PowerBuilder中的事件。例如命令按钮有一个叫 Clicked事件,当用户按按钮时触发,操作系统首先检测到鼠标被点击,并把Clicked这一消息转给该按钮,PowerBuilder运行时的工作引擎翻译了这一事件,并执行适当的PowerScript语句。PowerBuilder中大部分的事件都是可以映射成由用户激发的Windows事件。另一类事件是用户定义事件,这种事件是用户声明并可以在任何时刻由用户触发的,Power-Builder中保留了75个用户事件可由程序员使用。
(3)函数:用户通过函数来使对象完成某些操作。PowerSoft公司建议用户通过调用对象事件和函数来修改对象而不要直接修改对象属性,以满足对象封装的要求,例如采用Window. hide()而不要用Window.visi-ble=false来使窗口不可见。
PowerBuilder面向对象的特性
提到一门语言的面向对象特性,它应当具有继承性、多态性和封装性,如缺少其中的一个则只能称其为基于对象的系统,而不是面向对象的系统,而PowerBuilder则很好地具备了全部三个特性。
·继承:
PowerBuilder中,窗口、菜单和用户对象是可以继承的,而其他对象则都不能。当您继承了一个对象,那您得到的子类将具有父类的属性、实例变量、共享变量、控件、用户自定义事件、对象级函数、事件和代码(script)。也就是说当您继承了一个类,您几乎得到了这个类的全部,不过有一点值得注意,您不能在子类中删除任何一个继承到的特性。
在继承了祖先类后,您可以在子类中扩展或覆盖祖先的元素。例如代码,在PowerBuilde r中缺省的是采用扩展方式,先执行继承到的祖先代码,后执行子类的扩展代码。您也可以选择菜单Compiler|Override Ancestor Script选项,只执行子类的代码,并可在代码中的任意位置调动祖先代码如CALL w_l∷open。
重载函数是面向对象程序设计的重要特性,即同一函数名却有着不同的参数和返回值。在运行时,系统自动寻找执行参数相匹配的那个函数,例如我们常用的MessageBox()这个函数就有12个不同参数的重载函数。遗憾的是,对Power-Builder我们不能在同一个继承对象中定义2个不同参数的重载函数,只能在后继的类中定义重载函数,这使我们对重载函数的定义带来了很大的不便,这不能不说是PowerBuilder的缺陷。(不过在即将发布的PowerBuilder5.0 中,正是支持了函数重载这一特性。)
对于对象的继承,PowerBuilder中所有对象都有其共同的基类PowerObject,从这一个基类下面分成继承类Graph-icObject和NonVisualObject等。它们的继承关系和扩展函数及属性如下表:
 

·多态性:
在PowerBuilder中有大量的多态函数如print()、TriggerEvent()等,在运行过程中,您只需要指出对象和函数名即可。在有些函数中,即使不知道对象类,也可以用Class Name()函数得到对象类,或得到实例名,将对象名作为函数参数调用该函数。
·封装性:
封装的目的是为了实现数据隐藏和数据保护,封装的目标是为对象提供一个对外操作的接口,使其他对象通过函数来访问,而不允许直接操纵对象的属性。在PowerBuilder中有三种访问类型Public、Protect、Private,这三种访问控制类型可以用在对象的变量和函数上,缺省的实例变量和对象函数都是public类型的。为了保护数据,应尽可能多地使用private和p rotect类型,前者只允许对象内部的元素来访问,后者可以接受对象内部和继承类的元素访问。
PowerBuilder面向对象程序设计的过程
事实上用户在运用Power-Builder进行程序设计的一开始,就已经开始进行对象类的设计 :例如在建立窗口时可以用窗口画笔(painter)建立一个新窗口,命名为w_emp。建立的窗口就是从PowerBuilder的窗口对象继承下来的,所以窗口会自动具备一些属性,例如X和Y的坐标、高度、宽度、窗口类型、标题等。当用窗口画笔建立窗口时,您给这些属性赋了值,你还可以增加窗口的函数和事件。当窗口被保存时,你就建立了一个新的窗口继承类,称为:w_emp。输出对象的句法显示的部分程序如下:
global type w_emp from Window
int X=200
int Y=233
int Width=2405
int Height=1285
boolean TitleBar=true
string Title="Employee Mainte-nance"
string MenuName="m_emp"
long BackColor=12632256
boolean ControlMenu=true
boolean MinBox=true
boolean MaxBox=true
boolean Resizable=true
.
.
.
end type
global w_emp w_emp
请注意系统在这里做了什么:首先定义了w_emp窗口类是从window类继承而来,接着定义这一对象类的各属性值,在句法的最后一行声明了一个全局变量,变量的类型(对象类)是w_e mp,变量名(对象实例)也是w_emp。也就是说在您建立了w_emp这一窗口对象后,系统就具有了 w_emp这一对象类和w_emp这一全局变量。这个变量是引用变量,也就是在有些语言称之为指针的变量类型。引用变量并不真正含有窗口实例的属性,而是包含了一个位置或是内存中的一个地址,在那儿你可以找到实例的实际属性和程序。但在应用的开始时这一指针为空,因为在内存中并没有一个这样的窗口实例。当系统执行了Open(w_emp)后,系统在内存中复制了一份w_emp对象类的拷贝或实例,w_emp这一参照变量指向了这一地址。由于窗口对象的visibl e等属性都是Public类型,所以继承类也都具有了这些属性。  

 


//case 选择模式
Choose Case key
 case keyF1!
  ls_key="F1"
  this.postevent('ue_help')
  Return 1
 Case keyF2!
  ls_key="F2"
 Case keyEscape!
  // 放弃
  ls_key="Esc"
 case keyF12!
  ls_key="F12"
 case keyenter!
  Send(Handle(This),256,9,long(0,0))
  Return 1
End Choose


UO带头的对象才是一个真实的用户功能模块。
各个用户功能模块的功能解释都放在数据库sbds_sunmenu中。(select * from sbds_submenu)
以下四个都是公共类,供其他模块继承使用:
zjsiis.pbl//应用
siisuo.pbl
siisfn.pbl
siisfina.pbl
其他个功能模块的作用和功能队列如下:
功能模块代号   功能模块号码   功能模块名称   功能模块解释
ModuleNo     ModuleCode    ModuleName    ModuleExplain
1001       siisfn.pbl     公共函数
1002       siisbatc.pbl    
1003       siisbtsy.pbl    
1004       siisdecl.pbl    
1005       siisfina.pbl    公共函数
1006       siisacct.pbl    
1007       siispbqy1.pbl    
1008       siispbqy2.pbl    
1009       siispbqy3.pbl    
1010       siispsqy.pbl    
1011       siisreg.pbl     社保注册登记
1012       siisrtck.pbl    
1013       siisrtqy.pbl    
1014       siissecu.pbl    
1015       siissycx.pbl    
1016       siissymy.pbl    
1017       siistemp.pbl    临时存储
1018       siisuo.pbl     公共用户对象
1019       siiswd.pbl     工伤
1020       zjsiis.pbl     应用程序


SQL> desc sbds_submenu;
Name      Type           Nullable Default Comments                       
--------- -------------- -------- ------- -------------------------------
MENUCODE  NUMBER(6)                       功能编码::                     
MENUNAME  VARCHAR2(60)                    功能名称::                     
TPGNAME   VARCHAR2(40)                    功能对象名称::                 
MUEXPLAIN VARCHAR2(2000) Y                功能描述::                     
OPFLAG1   VARCHAR2(512)  Y                处理标志1::传递参数1           
OPFLAG2   VARCHAR2(512)  Y                处理标志2::传递参数2           
AUFLAG    CHAR(200)      Y                审核标志::传递参数3            
OPFLAG4   VARCHAR2(512)  Y                处理标志4                      
UTYPE     CHAR(1)        Y                空,0 表 完全 1 普通 2 征地    
PRSOURCE  VARCHAR2(200)  Y                日志数据源::                   
NEXTMENU  NUMBER(6)      Y                后续功能::                     
NDWSOURCE VARCHAR2(60)   Y                后续参数来源::                 
NDWTARGET VARCHAR2(60)   Y                后续参数目标::                 
OPATFLAG  CHAR(1)                         专管员标志::0 不控制 1 专管控制
AUTYPE    CHAR(1)        Y                                               
PROTTYPE  CHAR(4)        Y                                               
RBROLL    CHAR(1)        Y                          

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值