选择显示字体大小

powerbuilder应用开发系列讲座(16)


  p>生成可重用的数据窗口

  许多人在学习了窗口的继承以后,就认为掌握了powerbuilder的继承技术了。实际上,powerbuilder中继承的作用远不止这些。这里我们介绍利用继承的方法,设计一个可重用的数据窗口祖先。

  通过本节的介绍您将看到继承技术在数据窗口上的运用,体会它在这一方面发挥出灵活性和强大功能。 据窗口的继承通过自定义用户对象的方式扩展数据窗口控件,使该控件功能更为强大。

  在本节后面的部分中,我们把数据窗口控件的用户对象祖先叫作dwa_main。也可以命名为 任何别的想要的名字。 我们曾在以前的文章中介绍过,数据窗口对象是不具有继承性的,但是我们可以利用具有 可继承特性的数据窗口用户对象来拓展powerbuilder所提供的数据窗口的基本属性。这 里要注意的是所继承的是数据窗口控件,而不是数据窗口对象。

  为什么应该使用用户对象数据窗口,而不用powerbuilder提供的呢?当您将一个数据窗口 控件放到窗口上时,您所做的是继承一个基于系统事先定义好的数据窗口类以此来创建一 个新的数据窗口。这意味着,给您的数据窗口增加功能方法只有一个,就是在这个数据窗 口控件的事件语句中增加代码。您不能为这个数据窗口定义您自己的函数,您也不能给这 个数据窗口增加另外的属性。如果您认为有一些常用的操作需要封装,您只能将这些加入 数据窗口所在的窗口。如果您希望两个不同的数据窗口上有相同的行为,唯一的方法就是 重写代码。这显然不是好的面向对象的编程风格。解决上述问题的方法就是定义一个数 据窗口用户对象,这非常容易做到。您只要打开用户对象绘制器,选择"新建"和"标准可视 化用户对象";然后选择数据窗口作为类型。您就可以看见一个小白框。这就是您的数据 窗口控制,您可将它以dwa_main的名字存盘。dwa_main将是您的最底层的数据窗口祖先。 现在,当您在窗口上需使用数据窗口时,您不要将powerbuilder内部的数据窗口放到窗口 上了,而是放上您新创建的数据窗口用户对象。将这个数据窗口的名字取为dw_1。使用用 户对象来替代系统本身的数据窗口以后,您仍可以像以前那样使用数据窗口的所有函数、 属性和事件。不同的是,您现在可以在您的数据窗口祖先dwa_main中加入实例或共享的变 量、事件和函数。因为您在窗口中用到的数据窗口都继承了祖先数据窗口dwa_main,所以 所增加的一切都可以在每一个数据窗口控件中存在。 如果您认为这种方法可行,决定以后的设计都采用用户 罄刺娲鶳owerbuilder本身的数 据窗口,那么您可能还会遇到这样一个问题:如何在已编完的代码中用上这个对象。这里 我们介绍一种办法:将您的数据窗体控件的祖先对象由datawindow改变成为dwa_main。在 library画笔中输出含有数据窗口的窗口或用户对象,修改几个引用,然后将它再输入到您 的库中。注意在做这些操作之前,先做一下备份,以备操作失误时恢复。

  在您输出的窗口或自定义的可视化用户对象中,您可以看到类似下面的代码: type dw_1 from datawindow within w_anc我们曾在以前的文章中介绍过,这行代码的作 用是告诉powerbuilder编译器您定义了一个从数据窗口继承下来的名为dw_1的数据窗口 ,因此只要将datawindow改为dwa_main,就可以使dw_1继承的对象由系统内部的数据窗口 控件改为dwa_main。

  如果您打算让所有在您的机器上进行开发的其他人也使用dwa_main对象,您还可以自定义 窗口工具条,在工具条中加入一个新图标来代表数据窗口用户对象的控件。在定义工具条 的对话框中,要求填入dwa_main这一用户对象,并设置要得到的工具条文本和帮助信息。

数据窗口的构造事件

  一般情况下,如果某些代码在首次运行时执行初始化操作,应该将它们放在应用的open事 件中;如果在窗口被打开时执行初始化操作,则应将它们放在窗口的open事件中。同样,如 果想让代码在数据窗口被"打开"时执行初始化操作,应该使用数据窗口的构造事件,因为 当数据窗口创建时构造事件被激发。事实上,在窗口打开之前其上的每一个控件都会激发 自身的构造事件。假设窗口上有三个控件,它们的顺序为cb_ok、sle_1和dw_1。如果用o pensheet()函数将该窗口作为表单打开,将得到以下的事件序列:

cb_ok::constructor sle_1::constructor

dw_1::constructor

window::open

window::show

window::resize window::activate

cb_ok::getfocus

  如果您打开一个sdi窗口,您将得到以下的事件序列:

cb_ok::constructor

sle_1::constructor

dw_1::constructor

window::open

window::activate

cb_ok::getfocus

window::show

window::resize

  需要说明的是,窗体本身open事件中的初始化操作是在所有控件的构造事件被激发后才执 行的。如果用opensheetwithparm()或openwithparm()函数向窗口传递数据,那么在构造 事件中使用消息对象时就要特别小心。如果其中的任何一个构造事件修改了消息对象的 stringparm、doubleparm或powerobjectparm属性,open事件中使用的消息对象就不能得 到正确的信息。 我们对每一个数据窗口的构造事件编程时,总是要反复地键入: dw_1.settransobject(sqlca) 事实上,我们的应用中有90%以上是使用sqlca这个事务对象,如果我们采用用户对象的设 计方法,我们就可以把这一行代码写在用户对象之中,而不必在每次用数据窗口时都要键 入该行代码。 event:constructor

object:dwa_main

settransobject(sqlca)

  每一次调用这个用户对象,我们缺省的就是使用sqlca这个事务。我们完全不必担心这样 做会出现什么问题。因为如果使用外部数据窗口,powerbuilder是根本不会理会曾经执行 过的任何事务对象;如果使用的事务不是sqlca,那么只需在继承后的数据窗口中,再次调 用settransobject()这个函数,将用到的事务对象引入,系统就会将sqlca这个对象覆盖。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

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