选择显示字体大小

如何在pb中同时“继承”多个用户自定义数据窗口对象

北京英诺公司技术部 逄新利

---- 问题的提出

---- 我公司在开发医院信息管理系统的过程中,由于系统庞大,遇到这样一个棘手的问题: 我们制作了若干个用户自定义的数据窗口对象, 每个对象中封装了一个独立的功能, 如: 数据窗口排序功能,用户自定义列校验功能,下拉数据窗口快速录入功能,大文本录入功能,回车到下一列功能等等, 共12个功能对象, 由不同的人制作. 我们需要任意选取其中的某几个功能对象做为祖先继承, 由于pb不允许一个对象同时继承不同的祖先,且祖先一旦确定, 就不允许改变. 如果将这12个用户自定义数据窗口对象的功能全部封装到一个用户自定义数据窗口对象中, 虽然能解决继承问题, 但是该对象会很庞大,对象内部逻辑变得更复杂, 更难以维护,一些在调用时用不上的功能, 势必会在运行时消耗更多的系统资源. 既然继承的路走不通, 笔者就想出了一个对象变量引用的方法.

---- 解决问题的思路

---- 首先笔者引入了二个概念(指用户定义的数据窗口对象):

---- 1. 基本功能对象: 具有单一功能的,独立的,用户自定义的对象.

---- 2. 中间层对象: 把自己捕获到的事件以某种方式传递给基本功能对象实例变量, 以完成对基本功能对象相应的事件脚本的调用. 被继承, 但不继承任何其它对象.

---- 另做一个用户自定义数据窗口对象,它不继承任何对象, 称之为中间层对象, 在中间层对象中为每个需要用到的基本功能对象声明一个实例对象变量, 在中间层对象的事件中去调用实例对象相应的事件. 使用时继承中间层对象, 以完成对基本对象的选择与调用.(见图一)

---- 实现举例:

---- 1. 基本功能对象制作:

---- 新建二个数据窗口用户对象, 分别命名为: uo_dwa, uo_dwb . 在uo_dwa 的clicked 事件中写一行脚本:

---- messagebox ( ' uo_dwa ' , ' uo_dwa 的单击事件')

---- 在uo_dwb 的clicked 事件中写一行脚本:

---- messagebox ( ' uo_dwb ' , ' uo_dwb 的单击事件')

---- 2. 中间层对象制作:

---- 2.1新建一个数据窗口用户对象, 命名为 uo_dwinterlayer .

---- 2.2为中间层对象声明二个实例变量:

---- graphicobject igo_basedwobject[] //每一个元素是一个基本对象的实例引用 integer ii_basedwobjectnumber //保存元素的个数.

---- 2.3. 加一个用来注册的对象函数, 用来注册基本功能对象. uf_register (graphicobject a_obj[] , datawindow adw_object)

---- 函数内容:

long ll_circulater
ii_basedwobjectnumber = upperbound (a_obj[])
for ll_circulater = 1 to ii_basedwobjectnumber
igo_basedwobject[ll_circulater] =
a_obj[ll_circulater]
// 下行脚本用来注册基本功能对象中的实例变量
idw_this (说明见下文)
//igo_basedwobject[ll_circulater].function
dynamic uf_registerdwo ( adw_object)
end for
return


---- 2.4为中间层对象中加入每个基本功能对象拥有用户自定义事件, 在中间层对象的每个事件中加入如下脚本(事件clicked):
long ll_circulater
//调用被注册过的每个基本功能对象的相同的事件脚本
for ll_circulater = 1 to ii_basedwobjectnumber
//如果当前事件为editchanged , 则把下行脚本中的
clicked(xpos , ypos , row , dwo) 部分替换为
editchanged(row,dwo,data)
igo_basedwobject [ll_circulater].event
dynamic trigger clicked (xpos , ypos , row , dwo)
end for
return

---- 3. 新建一个窗口, 命名为w_testinterlayer . 在窗口中放置中间层对象: uo_dwinterlayer . 默认控件名: dw_1. 然后在控件dw_1的constructor 事件中对需要引用的基本功能对象进行注册, 即可实现引用基本功能对象的目的. 基本功能对象可以是任意个. 在dw_1 的constructor 事件中加入如下脚本:
//注册基础数据窗口对象
graphicobject lgo_basedwobject []  
  //声明一个可变长度的一维对象数组


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons