第 2章
PowerBuilder对象
利用 PowerBuilder开发需要访问服务器上数据库的
Windows应用程序, 开发效率高, 开发完成的应用系
统能够切实保证数据的安全可靠, 正确有效, 能够为
最终用户提供一个界面友好, 数据访问便捷高效, 功
能齐备的基于网络的分布式数据库应用系统 。
下一页
?对象设计, 实际上就是根据需要设计对
象的属性, 对特定的系统事件或用户自
定义事件编写代码, 设计对象 也就是软
件开发的过程 。
?介绍它们的属性、事件,对事件编写简
单的代码,最后给出两个简单应用例程。
下一页
2.1 应用程序
2.2 窗口与控件
2.3 菜单和工具栏
2.4 用户对象与用户事件
2.5 对象的继承
2.6 简单应用举例
返回
?应用程序对象 是 PowerBuilder一个
重要的概念, 它是整个应用程序运
行时的入口点, 它包含了被开发的
应用程序的总体信息和程序中用到
的其它对象的有关信息 。
下一页返回
2.1.1 创建应用程序对象
?1,建立文件夹
?2,建立工作空间
?3,建立应用程序对
象, 库和目标
下一页上一页
2.1.2 设置应用程序对象的属性
? PowerBuilder应用程序是由窗口, 菜单等许多
对象组成的, 而应用程序对象则包含了所有这
些对象的总体信息 。
? 通过, 属性, 窗格, 可以设置应用程序的显示
标题, 默认帮助内容, 工具栏框架标题, 工具
栏工作表标题, 决定是否允许用户控制工具栏,
是否在工具栏的图标上显示文本和提示等 。
? 设置整个应用程序各部分的 默认字体, 字号,
样式, 颜色, 应用程序图标和默认的全局变量 。
下一页上一页
2.1.3 应用程序对象的事件
? 打开应用程序对象, 在 Script窗口中的第二个下拉
列表框中显示的就是系统事件 。 其中:
? open事件 在应用程序启动后发生, 在这个事件的脚
本中主要做程序的初始工作, 如给全局变量赋值,
打开窗口等 。
? close事件在应用程序将要关闭的时候发生, 这个事
件的脚本是用来处理程序关闭前的善后工作, 比如
和后台数据库断开连接等 。
? 程序中调用了 idle函数, 那么应用程序运行时用户
在一定的时间里没有使用鼠标和键盘就会触发 idle
事件 。 idle事件的脚本用来处理程序长时间没有输
入事件的情况, 比如可以在脚本中调用屏幕保护程
序 。 返回本章上一页
2.2 窗口与控件
? 窗口是应用程序与用户交流的主要界面。可用来显示
有关信息,响应用户的鼠标和键盘输入等等。
2.1 窗口的类型
2.2 建立或打开窗口
2.3 对窗口进行设计
2.4 控件简介
2.5 使用控件
返回本章
2.2.1 窗口的类型
? 六种不同类型的窗口 。
1,主窗口
2,弹出式窗口
3,子窗口
4,响应式窗口
5,多文档界面窗口
6.带帮助的多文档界面窗口 返回
? 窗口作为一个对象, 保存在对象库中, 对象库
与当前工作空间, 当前目标关联, 因此要建立
或打开窗口, 首先打开一个工作空间并指定当
前目标 。
? 1,打开一个工作空间 ( Workspace)
【 方法 1】
在 PowerBar工具栏上单击, Library”按钮,
【 方法 2】
在, File|Recent Workspace”菜单中选择需
要打开的工作空间
下一页
2.2.2 建立或打开窗口
? 2,指定当前目标 ( Target)
? 3,建立新窗口
? 4,打开已有的窗口
【 方法 1】
在 PowerBar工具栏上单击, Open”按钮 。
【 方法 2】
在 PowerBar工具栏上单击, System Tree”按
钮 。
【 方法 3】
在 PowerBar工具栏上单击, Library”按钮
返回上一页
? 1,设置窗口属性
? 窗口建立或打开后, 属性视图一般会自动打开 。
? 在, General”标签页中:
?, Title”的内容被用作窗口的标题, 系统已经
设置了一个缺省的标题, Untitled”。
?, Menu Name”用来指定窗口所关联的菜单, 可
以通过单击, …,按钮查找和选择菜单 。 窗口
并不要求一定有菜单 。
下一页
2.2.3 对窗口进行设计
? Tag”属性可以设置一个字符串, 这个字
符串在一些需要的地方可能会被使用,
比如在适当的时候把它显示在窗口的状
态栏上作为提示帮助信息等 。
? 若干个复选框分别用来设置窗口是否可
见, 有效, 是否有控制菜单, 最大, 最
小化按钮, 是否可 改变大小, 是否居中
等等 。 其中灰色的复选框表示对这种类
型的窗口是不可用的 。
?, Window Type”下拉列表用来选择窗口
的类型, 也就是前面介绍的六种窗口,
根据需要选择其中一种 。
下一页上一页
?,WindowState”下拉列表用来选择窗口的
初始状态, 有, 最大化,,, 最小化,
和, 原始大小, 三种供选择 。
?, BackColor”用来设置窗口的背景颜色 。
?, MDIClient color”用来设置多文档窗
口的工作区的颜色,, main”类型窗口,
这一栏不可用 。
?, Icon”用来设置窗口的图标 。
下一页上一页
? 2,对窗口进行编码
?
? 打开窗口画板, 鼠标右击, 在弹出的快捷菜单
中选, Script”项, 或者直接用鼠标双击窗口,
都可以进入窗口的脚本视图 。
?
? 3,窗口的预览和保存
?
? 单击 PainterBar工具条上的, Preview”按钮 。
? 要保存窗口,, File”菜单的, Save”项, 或
单击 PainterBar工具条上的, Save”按钮 。
返回
2.2.4 控件简件
? 单击 PainterBar工具栏上的, 控件, 图形下拉
列表
? 各控件作简单介绍 。
1,命令按钮 ( CommandButton)
2,图形按钮 ( PictureButton)
3,静态文本 ( StaticText)
4,静态超级链接 ( StaticHyperLink)
5,单行编辑框 ( SingleLineEdit) 和多行编
辑框 ( MultiLineEdit)
下一页
6,掩码编辑框 ( EditMask)
7,大文本编辑器 ( RichTextEdit
8,分组框 ( GroupBox)
9,标签 ( tab)
10,单选按钮 ( RadioButton)
11,复选框 ( CheckBox)
12,跟踪条 ( TrackBar)
13,滚动条 (ScrollBar)
14,进度条 ( ProgressBar)
15,列表框 ( ListBox)
16,树视图 ( TreeView)
下一页上一页
? 17,表视图 ( ListView)
? 18,图画控件
? 19,图形 ( Picture)
? 20,图形超级链接 ( PictureHyperLink)
? 21,图表 ( Graph)
? 22,数据窗口 ( DataWindow)
? 23,用户对象 ( User Object)
? 24,OLE控件
返回上一页
2.2.5 使用控件
设置控件的属性和对控件进行编码 。
1,在窗口中放置控件
2,选中窗口中的控件
3,复制和删除控件
4,调整控件位置和大小
5,排列控件
6,定义控件的 Tab次序
7,控件的属性设置
8,对控件进行编码
返回
2.3 菜单和工具栏
? 在 Windows应用程序中, 通常还把工具栏按钮
和菜单命令关联起来, 用户可以根据自己的习
惯或使用时的状态选用工具按钮或菜单项执行
相同的操作 。
? 为方便用户操作, 使用菜单还可以有多种方法,
既可以用鼠标, 也可以用键盘, 用键盘时可以
使用热键和快捷键 。
? 状态条一般显示在窗口的底部,向用户提示使
用程序的方法以及一些当前的系统状态。
下一页返回
2.3.1创建菜单
首先 开一个工作空间并指定当前目标 。
? 在 PowerBar工具栏上单击, New”按钮,
在打开的, New”对话框中选, PB Object”
选项卡, 选中, Menu”图标, 单击, OK”
按钮, 出现菜单画板 。
? 在, File”菜单中选, Save As…,项, 指
定菜单名保存后, 菜单标题变为菜单名 。
在, Insert”菜单中选, Submenu Item”
插入一个新的子菜单项 。
下一页返回
2.3.2 设置菜单和工具栏属性
?
? Menu画板的属性窗格有两个标签, 它们就是用
来设置当前被选中的菜单项的各种属性 。
? 在, General”标签页中,, Name”为菜单项名
字,, Text”为菜单项文本,, MicroHelp”为
该菜单项显示在窗口底部状态条上的帮助信息 。
复选框, Visible”表示可见性,, Enabled”为
可用性,, Checked”为选中状态 。
? 在, Shortcut”下拉列表中可以选择快捷键,
这些快捷键可以根据需要与, Alt”,,Ctrl”
及, Shift”键组合使用 。
下一页返回
? 在, Toolbar”标签页中, 可以将菜单项和工具
栏上的某个图标按钮相连, 这样以后单击这个
按钮就相当于单击相应的菜单项 。
?, ToolbaritemText”栏用来输入对图标按钮的
描述性文本 。 从, ToolbaritemName”下拉列表
中 可 以 选 择 按 钮 平 常 状 态 的 图 标,
,ToolbaritemDownName”下拉列表可以设置该
按 钮 被 按 下 状 态 的 图 标 。
,ToolbaritemVisible”复选框用来指定按钮
的可见性, 图标按钮的可见性与菜单项的可见
性互不相干 。, ToolbaritemSpace”用来定义
该按钮显示在工具条上时与前
下一页返回
2.3.3 编写菜单脚本
? 如果脚本窗格没出现, 可右击任意菜单项, 在
弹出的快捷菜单中选, Script”项, 便可打开
脚本窗格 。
? 要想为某一个菜单项编写代码, 双击该菜单项 。
? 菜单项的事件不多,,只对, clicked”事件编
码 。
返回
2.4 用户对象与用户事件
? 对象是面向对象程序设计的核心概念 。 除了系
统提供的窗口, 菜单等标准对象类型外,
PowerBuilder还允许用户根据需要定义自己的
对象类型, 这就是用户对象 。
? 用户对象可以扩展系统原有对象的功能, 增加
新的使用方法, 还可以创建出具有可重用性的
自定义部件, 在一个或多个应用程序中反复使
用, 缩减开发时间, 进一步提高应用程序的开
发效率 。 同时, 对运行速度要求较高的程序部
分 可 以 用 C++ 开发, 然 后 将 其 嵌 入 到
PowerBuilder应用程序中 。
下一页返回
? 用户对象一般用于完成通用的功能 。 优点:
(1)避免相同或相近代码的编写, 提高模块化
程度, 从而提高了应用程序的可维护性 。
(2)可以把一起使用的可视控件和相关功能组
合在一起, 构成一个完成特定功能的对象, 应
用程序可以随时使用它 。
(3)便于构造具有一致外观的可视部件 。
(4)可以扩展某些 PowerBuilder 系统对象
(比如事务对象)的功能
下一页上一页
第二章第四节主要内容:
4.1 用户对象的类型
4.2 创建用户对象
4.3 使用用户对象
4.4 用户事件
返回
2.4.1 用户对象的类型
? 可视用户对象 如同按钮控件对象那样具
备可视的外观, 主要完成应用程序与用
户之间的信息交互 。
? 类用户对象 没有屏幕表现形式, 它们主
要用于封装和完成一定的业务逻辑 。 每
类用户对象又都有三种不同的形式, 解
决应用程序的不同需求 。
下一页返回
1,可视用户对象
? 可视用户对象是个可重用控件或一组完成一定功能的控件 。
? 可视用户对象有三种类型:
(1)标准可视用户对象 ( Standard Visual User Object)
(2)定制可视用户对象 ( Custom Visual User Object)
(3)外部可视用户对象 ( External Visual User Object)
2,类用户对象
? 类用户对象没有可视成分, 它通常用于封装应用逻辑和特
定功能 。
? 类用户对象也有三种类型:
(1)标准类用户对象
(2)定制类用户对象
(3)C++类用户对象
返回 上一页
2.4.2 创建用户对象
建用户对象, 首先单击 PowerBuilder主工具
栏 PowerBar的, New”按钮, 打开, New”对话框,
并选择, PB Object”选项卡
双击要创建的用户对象类型即可开始用户对
象的创建 。
用户对象创建之后,对于可视用户对象可
作为控件添加到窗口中,而类用户对象则可用
于声明变量的 PowerScript 语句中
下一页
1,创建标准可视用户对象
,PB Object” 选项卡中双击, Standard
Visual” 图标, 打开, Select Standard
Visual Type”对话框, 从该对话框的, Types”
列表中选择一种标准可视控件即可打开用户对
象画板, 开始标准可视用户对象的创建 。
2,创建定制可视用户对象
,PB Object”选项卡中选择, Custom
Visual” 图标,单击, OK” 按钮。
返回 下一页上一页
3,创建外部可视用户对象
,PB Object”选项卡中选择, External Visual” 图标,
单击, OK”按钮,
? 然后进行如下操作:
① 在属性对话框的, LibraryName”编辑框中键入用作外部
用户对象的 DLL文件名, 或者单击编辑器右边的,,..”
( 生成器 ) 按钮, 从打开的, Select Custom Control
DLL”对话框中选择 DLL文件 。
② 在, ClassName”编辑框中键入 DLL中的注册类名 ( 该类名
通常由生产 DLL的厂商提供 ) 。
③ 在, Text”编辑框中输入显示在控件上的文本以及其它必
要的属性 。
④ 声明用户对象所需要的函数, 事件, 变量, 结构 。
⑤ 编写用户对象的事件处理程序 。
⑥从, File”菜单中选择, Save”项保存用户对象
返回 下一页上一页
4,创建标准类用户对象
?, PB Object” 选 项 卡 中 选 择, Standard
Class” 图标, 打开, Select Standard Class
Type”对话框, 从该对话框的, Types”列表中
选择要创建的用户对象所继承的内部系统对象,
然后单击, OK”按钮, 即可打开用户对象画板,
开始标准类对象的创建 。
? 在用户对象画板中进行如下操作:
① 声明用户对象所需的函数, 事件, 变量, 结
构 。
② 编写所需的各种事件处理程序 。
③ 从, File”菜单中选择, Save”项保存用户对
象 。
返回 下一页上一页
5,创建定制类用户对象
,PB Object”选项卡中选择, Custom Class”
图标, 打开用户对象画板 。
① 声明用户对象所需的函数, 事件, 变量, 结
构 。
② 编写用户对象所需的各种事件处理程序 。
③ 从, File”菜单中选择, Save”项保存用户对
象 。
定制类用户对象不继承 PowerBuilder内部系
统对象, 完全由设计人员通过定义实例变量,
函数, 事件来实现 。
返回 上一页
2.4.3 使用用户对象
1,使用可视用户对象
把可视用户对象放置到窗口上, 可按下列步骤
行:
① 打开需要的窗口 。
② 在窗口画板的 PaintBar工具栏中, 从控件图标
列表中选择, User Object”图标, 打开, Select
Object”对话框 。
③ 在, Select Object” 对话框中, 从
,Application Libraries”列表中选择用户对象
所在的库文件, 此时可用的用户对象将显示在
,User Objects”下面的列表框中, 从中选择所
需的用户对象, 然后单击, OK”按钮 。
④ 在窗口画板的, Layout”视图区上, 单击放置用
户对象的位置, 用户对象即出现在窗口上 。
返回 下一页
2,使用类用户对象
使用类用户对象时, 需要在代码中创建它的
一个实例, 步骤为:
① 声明类用户对象的实例变量, 用 CREATE
语句创建该对象的一个实例 。
② 在变量的整个作用域中, 代码都能访问
该对象的属性, 事件, 函数, 引用方法与使
用系统预定义对象 (例如事务对象 )相同 。
③ 不再使用该用户对象时, 使用 DESTROY语
句删除该对象, 以释放它所占用的内存 。
返回 下一页
上一页
上一页
3,窗口与用户对象间的通信
窗口与用户对象之间通常需要交换信息 。
窗口与可视用户对象之间交换信息的主要方
式, 一是使用函数, 二是使用用户事件, 三是
直接引用用户对象属性 。
使用函数进行信息交换时, 可以定义全局
( Public) 函数, 利用全局函数把用户对象内
部信息传递给窗口, 或把窗口信息传递到用户
对象内部 。
使用用户事件进行信息交换时, 可以为用户
对象定义一些用户事件以及相应的参数, 这样
可以通过编写事件处理程序或触发事件完成用
户与窗口之间的通信 。
返回 上一页
2.4.4 用户事件
具体来说, 用户事件适用于以下场合:
(1)解决用户对象与窗口之间的通信问题 。
用户事件可以通过参数进行信息传递 。
(2)响应特殊操作, 这些操作没有相应的
PowerBuilder预定义事件 。
(3)支持用户通过多种方式完成同一个功
能 。
返回 下一页
1,定义用户事件
在 PowerBuilder中, 为窗口, 控件, 用户对象
定义用户事件的方法都是一样的 。
? 具体操作步骤如下:
① 打开要定义用户事件的窗口或用户对象 。
② 在窗口画板或用户对象画板中, 双击窗口,
控件或用户对象, 或选择, View”菜单中的
,Script”项, 打开脚本视图 。
③ 在脚本视图中, 第二个下拉列表框即为事件
列表框, 从中选择, New Evernt”项, 则脚本视
图如图 2.16所示 。
④ 在脚本视图的原型部分中定义用户事件的原
型 。
⑤ 为所定义的事件编写实现其功能的代码并保
存 。 返回 下一页上一页
? 2,几点说明
? (1)参数传递方式
? 值传递:该方式将调用者的变量复制一份传递
给被调用者 。 多用于传递简单数据, 而对于复
杂数据, 如结构, 对象等, 由于参数的复制增
加了调用开销, 从而降低了程序效率 。 采用值
传递方式时, 被调用者不能通过参数修改调用
数据 。
? 引用传递:该方式将调用者变量的指针传递给
被调用者, 从而可以在被调用者中修改调用者
数据 。 此方式仅传递一个地址, 对任何数据类
型的传递, 其系统开销相同 。
? 只读传递:该传递方式结合了值传递和引用传
递的特点, 既具有值传递的被调用者不能修改
调用者所传递参数的特点, 又具有引用传递系
统开销较小的特点 。 返回 下一页上一页
2)事件标识 (Event ID)
每个事件标识对应于 PowerBuilder的一个
事件 。 而 PowerBuilder的每个事件, 都对应于
特定的 Windows消息 。 两者关系可以从事件标
识名称的后半部推断 。 例如, pbm_mousemove
对应于 Windows 消息 wm_mousemove,
pbm_keydown对应于 Windows 消息 wm_keydown。
(3)自定义事件
当需要定义只能由代码触发的用户事件
时,在, Event ID”下拉列表框中选择, None”,
这样就定义了自定义事件。此时,可以为用户
事件定义参数。对于事件参数的修改、删除和
添加,都可以通过快捷菜单来完成
返回 下一页上一页
(4) Other事件
如果应用程序对象需要调用某
个 Windows 消息, 而 该 消 息 没 有
PowerBuilder事件标识与其对应, 那
么可以在该对象的 Other事件中处理该
消息 。 PowerBuilder把除该对象已定
义事件外的所有 Windows 消息都映射
到 Other事件 。 通过编写代码和查阅
Message对象的属性, 可以处理特定的
Windows 消息 。
返回 下一页上一页
? 3,使用用户事件
① 编写用户事件的处理程序 。 没有事件处理程
序时, 即使发生了该事件, 也不做任何处理,
程序可在定义用户事件的同时进行编写 。
② 必要时编写触发用户事件的代码 。
4,删除用户事件
返回 上一页
2.5 对象的继承
使用继承, 我们可以从已经建好的窗
口, 用户对象, 菜单等对象出发派生
它的子对象 。 派生出子对象的对象被
称之为祖先, 而对由祖先派生出来的
对象, 被称之为后代 。 后代将继承祖
先所有的特性和程序 。
返回 下一页
2.5.1 使用继承创建窗口
在 PowerBar工具栏上单击, Inherit”按钮,
,Inherit from Object”对话框, 让我们选择
要继承的对象 。
在, Target”下拉列表中选择需要的目标 。
如果该目标对应有多个对象库, 可选择一个
对象库 。
在, Objets of Type”下拉列表中选择窗口对
象类型或全部对象 ( All Objects), 然后选
择要继承的窗口对象, 最后单击, OK”按钮,
进入窗口画板 。
可以象打开普通窗口一样打开后代窗口,
进行属性修改和代码编
下一页返回 上一页
? 在窗口上面单击鼠标的右键, 在弹出菜单中选择
,Script”命令, 可以打开脚本视图对指定的事件进行
编码 。
? 如果要扩展祖先脚本, 可选中, Edit”菜单当中的
,Extend ancestor script”项, 如果该菜单项未被选
中, 就表示重载祖先的脚本 。
? 在 PowerBuilder中, 继承的层次可以有多层, 就是说
一个后代对象可以有父亲, 祖父或者更高层次的祖先 。
在为后代对象编写脚本的时候, 我们可以调用任何祖
先对象当中已经写好的脚本 。 比方说调用父对象中的
,clicked”事件的脚本, 可以输入下面这样的代码:
? call super::clicked
? 而调用更高层次祖先的的脚本的时候就必须标出祖先
对象的名字, 如:
? w_ancestor::clicked
下一页返回 上一页
2.5.2 使用继承创建用户对象
通过继承一个已有的用户对象创建新用户对象,
方法与继承窗口类似 。
,Open”用来打开用户的文本文件, 并且在多
行编辑框中显示文件的内容 。
,Close”用来显示关闭提示消息框, 然后关闭
窗口 。
具体方法是:
首先在 PowerBar工具栏上单击, Inherit”按钮,
,Inherit from Object”对话框 。
在对话框中选择需要的目标和对象库 。
在, Objets of Type”下拉列表中选择对象类
型, User Objects”,然后选择要继承的用户
对象, 最后单击, OK”按钮, 进入用户对象画
板 。 返回 上一页
2.6 简单应用举例
? 【 例 2.1】 动画演示 。
? ① 建立文件夹, 准备图形文件
? 进入 Powerbuilder 8.0,在 PowerBar工具栏上
单击, library”按钮, 在左边窗格中选择要建
立文件夹的驱动器或目录, 右击鼠标, 在弹出
的快捷菜单中选, New Folder”,输入文件夹
名, 动画, 。
? ② 打开工作空间
? 在 PowerBar工具栏上单击, library”按钮, 在
左边窗格中找到需要打开的工作空间文件, 右
击工作空间文件, 在弹出的快捷菜单中选
,Open Workspace”项, 该工作空间即被打开 。
下一页返回
③ 建立应用程序对象, 库和目标
在 PowerBar工具栏上单击, New”按钮, 在
,New”对话框中选, Target”选项卡, 选中
,application”图标, 单击, OK”按钮, 在弹
出的对话框中指定, Application Name”、
,library”和, Target”如图 2.18所示 。 单击
,Finish”按钮, 便同时建立了目标 dh.pbt、
对象库 dh.pbl和应用程序对象 dh
④ 建立窗口
在 PowerBar工具栏上单击, New”按钮,在
,New”对话框中选, PB Object”选项卡,选中
,Window”图标,单击, OK”按钮,出现窗口画
板。
下一页返回 上一页
⑤ 编码
在窗口布局视图中, 双击, 播放, 命令按钮, 打开脚
本视图, 选择, clicked”事件, 编写如下代码:
if cb_1.text="播放 " then
cb_1.text="停止 "
timer(0.2)
else
cb_1.text="播放 "
timer(0)
end if
最后, 打开应用程序对象, 在, open”事件中输入
一行代码,open(w_main)。
⑥ 运行
在 PowerBar工具栏上单击, Select and Run”按钮,
选择目标, dh”,程序开始运行 。 单击, 播放, 按钮,
下一页返回 上一页
【 例 2.2】 图形文件查找和显示 。
本例要建立一个窗口, 窗口上带有一个菜单
和一个工具栏 。 通过主菜单, 快捷菜单和工具
栏按钮任意一种方式, 可以查找图形文件所在
目录, 将图形文件名添加到列表框, 按原始 大
小和比例放大两种方式显示图形 。
① 准备
按前面介绍的方法建立一个, 图形文件,
文件夹,打开或建立工作空间,建立目标
txwj.pbt、对象库 txwj.pbl和应用程序对象
txwj。
下一页返回 上一页
② 设计窗口布局
创建一个新窗口, 在窗口画板中设计如图
2.21所示的布局, 保存为, w_exercise”。
③ 对窗口控件的编码
在窗口布局视图中, 双击列表框 lb_file,打
开脚本视图, 对默认的, selectionchanged”
事件编写如下代码:
integer i
FOR i = 1 to lb_file.TotalItems()
IF lb_file.State(i) = 1 THEN
p_1.picturename = lb_file.Text(i)
exit
下一页返回本节 上一页
本章到此结束
返回
PowerBuilder对象
利用 PowerBuilder开发需要访问服务器上数据库的
Windows应用程序, 开发效率高, 开发完成的应用系
统能够切实保证数据的安全可靠, 正确有效, 能够为
最终用户提供一个界面友好, 数据访问便捷高效, 功
能齐备的基于网络的分布式数据库应用系统 。
下一页
?对象设计, 实际上就是根据需要设计对
象的属性, 对特定的系统事件或用户自
定义事件编写代码, 设计对象 也就是软
件开发的过程 。
?介绍它们的属性、事件,对事件编写简
单的代码,最后给出两个简单应用例程。
下一页
2.1 应用程序
2.2 窗口与控件
2.3 菜单和工具栏
2.4 用户对象与用户事件
2.5 对象的继承
2.6 简单应用举例
返回
?应用程序对象 是 PowerBuilder一个
重要的概念, 它是整个应用程序运
行时的入口点, 它包含了被开发的
应用程序的总体信息和程序中用到
的其它对象的有关信息 。
下一页返回
2.1.1 创建应用程序对象
?1,建立文件夹
?2,建立工作空间
?3,建立应用程序对
象, 库和目标
下一页上一页
2.1.2 设置应用程序对象的属性
? PowerBuilder应用程序是由窗口, 菜单等许多
对象组成的, 而应用程序对象则包含了所有这
些对象的总体信息 。
? 通过, 属性, 窗格, 可以设置应用程序的显示
标题, 默认帮助内容, 工具栏框架标题, 工具
栏工作表标题, 决定是否允许用户控制工具栏,
是否在工具栏的图标上显示文本和提示等 。
? 设置整个应用程序各部分的 默认字体, 字号,
样式, 颜色, 应用程序图标和默认的全局变量 。
下一页上一页
2.1.3 应用程序对象的事件
? 打开应用程序对象, 在 Script窗口中的第二个下拉
列表框中显示的就是系统事件 。 其中:
? open事件 在应用程序启动后发生, 在这个事件的脚
本中主要做程序的初始工作, 如给全局变量赋值,
打开窗口等 。
? close事件在应用程序将要关闭的时候发生, 这个事
件的脚本是用来处理程序关闭前的善后工作, 比如
和后台数据库断开连接等 。
? 程序中调用了 idle函数, 那么应用程序运行时用户
在一定的时间里没有使用鼠标和键盘就会触发 idle
事件 。 idle事件的脚本用来处理程序长时间没有输
入事件的情况, 比如可以在脚本中调用屏幕保护程
序 。 返回本章上一页
2.2 窗口与控件
? 窗口是应用程序与用户交流的主要界面。可用来显示
有关信息,响应用户的鼠标和键盘输入等等。
2.1 窗口的类型
2.2 建立或打开窗口
2.3 对窗口进行设计
2.4 控件简介
2.5 使用控件
返回本章
2.2.1 窗口的类型
? 六种不同类型的窗口 。
1,主窗口
2,弹出式窗口
3,子窗口
4,响应式窗口
5,多文档界面窗口
6.带帮助的多文档界面窗口 返回
? 窗口作为一个对象, 保存在对象库中, 对象库
与当前工作空间, 当前目标关联, 因此要建立
或打开窗口, 首先打开一个工作空间并指定当
前目标 。
? 1,打开一个工作空间 ( Workspace)
【 方法 1】
在 PowerBar工具栏上单击, Library”按钮,
【 方法 2】
在, File|Recent Workspace”菜单中选择需
要打开的工作空间
下一页
2.2.2 建立或打开窗口
? 2,指定当前目标 ( Target)
? 3,建立新窗口
? 4,打开已有的窗口
【 方法 1】
在 PowerBar工具栏上单击, Open”按钮 。
【 方法 2】
在 PowerBar工具栏上单击, System Tree”按
钮 。
【 方法 3】
在 PowerBar工具栏上单击, Library”按钮
返回上一页
? 1,设置窗口属性
? 窗口建立或打开后, 属性视图一般会自动打开 。
? 在, General”标签页中:
?, Title”的内容被用作窗口的标题, 系统已经
设置了一个缺省的标题, Untitled”。
?, Menu Name”用来指定窗口所关联的菜单, 可
以通过单击, …,按钮查找和选择菜单 。 窗口
并不要求一定有菜单 。
下一页
2.2.3 对窗口进行设计
? Tag”属性可以设置一个字符串, 这个字
符串在一些需要的地方可能会被使用,
比如在适当的时候把它显示在窗口的状
态栏上作为提示帮助信息等 。
? 若干个复选框分别用来设置窗口是否可
见, 有效, 是否有控制菜单, 最大, 最
小化按钮, 是否可 改变大小, 是否居中
等等 。 其中灰色的复选框表示对这种类
型的窗口是不可用的 。
?, Window Type”下拉列表用来选择窗口
的类型, 也就是前面介绍的六种窗口,
根据需要选择其中一种 。
下一页上一页
?,WindowState”下拉列表用来选择窗口的
初始状态, 有, 最大化,,, 最小化,
和, 原始大小, 三种供选择 。
?, BackColor”用来设置窗口的背景颜色 。
?, MDIClient color”用来设置多文档窗
口的工作区的颜色,, main”类型窗口,
这一栏不可用 。
?, Icon”用来设置窗口的图标 。
下一页上一页
? 2,对窗口进行编码
?
? 打开窗口画板, 鼠标右击, 在弹出的快捷菜单
中选, Script”项, 或者直接用鼠标双击窗口,
都可以进入窗口的脚本视图 。
?
? 3,窗口的预览和保存
?
? 单击 PainterBar工具条上的, Preview”按钮 。
? 要保存窗口,, File”菜单的, Save”项, 或
单击 PainterBar工具条上的, Save”按钮 。
返回
2.2.4 控件简件
? 单击 PainterBar工具栏上的, 控件, 图形下拉
列表
? 各控件作简单介绍 。
1,命令按钮 ( CommandButton)
2,图形按钮 ( PictureButton)
3,静态文本 ( StaticText)
4,静态超级链接 ( StaticHyperLink)
5,单行编辑框 ( SingleLineEdit) 和多行编
辑框 ( MultiLineEdit)
下一页
6,掩码编辑框 ( EditMask)
7,大文本编辑器 ( RichTextEdit
8,分组框 ( GroupBox)
9,标签 ( tab)
10,单选按钮 ( RadioButton)
11,复选框 ( CheckBox)
12,跟踪条 ( TrackBar)
13,滚动条 (ScrollBar)
14,进度条 ( ProgressBar)
15,列表框 ( ListBox)
16,树视图 ( TreeView)
下一页上一页
? 17,表视图 ( ListView)
? 18,图画控件
? 19,图形 ( Picture)
? 20,图形超级链接 ( PictureHyperLink)
? 21,图表 ( Graph)
? 22,数据窗口 ( DataWindow)
? 23,用户对象 ( User Object)
? 24,OLE控件
返回上一页
2.2.5 使用控件
设置控件的属性和对控件进行编码 。
1,在窗口中放置控件
2,选中窗口中的控件
3,复制和删除控件
4,调整控件位置和大小
5,排列控件
6,定义控件的 Tab次序
7,控件的属性设置
8,对控件进行编码
返回
2.3 菜单和工具栏
? 在 Windows应用程序中, 通常还把工具栏按钮
和菜单命令关联起来, 用户可以根据自己的习
惯或使用时的状态选用工具按钮或菜单项执行
相同的操作 。
? 为方便用户操作, 使用菜单还可以有多种方法,
既可以用鼠标, 也可以用键盘, 用键盘时可以
使用热键和快捷键 。
? 状态条一般显示在窗口的底部,向用户提示使
用程序的方法以及一些当前的系统状态。
下一页返回
2.3.1创建菜单
首先 开一个工作空间并指定当前目标 。
? 在 PowerBar工具栏上单击, New”按钮,
在打开的, New”对话框中选, PB Object”
选项卡, 选中, Menu”图标, 单击, OK”
按钮, 出现菜单画板 。
? 在, File”菜单中选, Save As…,项, 指
定菜单名保存后, 菜单标题变为菜单名 。
在, Insert”菜单中选, Submenu Item”
插入一个新的子菜单项 。
下一页返回
2.3.2 设置菜单和工具栏属性
?
? Menu画板的属性窗格有两个标签, 它们就是用
来设置当前被选中的菜单项的各种属性 。
? 在, General”标签页中,, Name”为菜单项名
字,, Text”为菜单项文本,, MicroHelp”为
该菜单项显示在窗口底部状态条上的帮助信息 。
复选框, Visible”表示可见性,, Enabled”为
可用性,, Checked”为选中状态 。
? 在, Shortcut”下拉列表中可以选择快捷键,
这些快捷键可以根据需要与, Alt”,,Ctrl”
及, Shift”键组合使用 。
下一页返回
? 在, Toolbar”标签页中, 可以将菜单项和工具
栏上的某个图标按钮相连, 这样以后单击这个
按钮就相当于单击相应的菜单项 。
?, ToolbaritemText”栏用来输入对图标按钮的
描述性文本 。 从, ToolbaritemName”下拉列表
中 可 以 选 择 按 钮 平 常 状 态 的 图 标,
,ToolbaritemDownName”下拉列表可以设置该
按 钮 被 按 下 状 态 的 图 标 。
,ToolbaritemVisible”复选框用来指定按钮
的可见性, 图标按钮的可见性与菜单项的可见
性互不相干 。, ToolbaritemSpace”用来定义
该按钮显示在工具条上时与前
下一页返回
2.3.3 编写菜单脚本
? 如果脚本窗格没出现, 可右击任意菜单项, 在
弹出的快捷菜单中选, Script”项, 便可打开
脚本窗格 。
? 要想为某一个菜单项编写代码, 双击该菜单项 。
? 菜单项的事件不多,,只对, clicked”事件编
码 。
返回
2.4 用户对象与用户事件
? 对象是面向对象程序设计的核心概念 。 除了系
统提供的窗口, 菜单等标准对象类型外,
PowerBuilder还允许用户根据需要定义自己的
对象类型, 这就是用户对象 。
? 用户对象可以扩展系统原有对象的功能, 增加
新的使用方法, 还可以创建出具有可重用性的
自定义部件, 在一个或多个应用程序中反复使
用, 缩减开发时间, 进一步提高应用程序的开
发效率 。 同时, 对运行速度要求较高的程序部
分 可 以 用 C++ 开发, 然 后 将 其 嵌 入 到
PowerBuilder应用程序中 。
下一页返回
? 用户对象一般用于完成通用的功能 。 优点:
(1)避免相同或相近代码的编写, 提高模块化
程度, 从而提高了应用程序的可维护性 。
(2)可以把一起使用的可视控件和相关功能组
合在一起, 构成一个完成特定功能的对象, 应
用程序可以随时使用它 。
(3)便于构造具有一致外观的可视部件 。
(4)可以扩展某些 PowerBuilder 系统对象
(比如事务对象)的功能
下一页上一页
第二章第四节主要内容:
4.1 用户对象的类型
4.2 创建用户对象
4.3 使用用户对象
4.4 用户事件
返回
2.4.1 用户对象的类型
? 可视用户对象 如同按钮控件对象那样具
备可视的外观, 主要完成应用程序与用
户之间的信息交互 。
? 类用户对象 没有屏幕表现形式, 它们主
要用于封装和完成一定的业务逻辑 。 每
类用户对象又都有三种不同的形式, 解
决应用程序的不同需求 。
下一页返回
1,可视用户对象
? 可视用户对象是个可重用控件或一组完成一定功能的控件 。
? 可视用户对象有三种类型:
(1)标准可视用户对象 ( Standard Visual User Object)
(2)定制可视用户对象 ( Custom Visual User Object)
(3)外部可视用户对象 ( External Visual User Object)
2,类用户对象
? 类用户对象没有可视成分, 它通常用于封装应用逻辑和特
定功能 。
? 类用户对象也有三种类型:
(1)标准类用户对象
(2)定制类用户对象
(3)C++类用户对象
返回 上一页
2.4.2 创建用户对象
建用户对象, 首先单击 PowerBuilder主工具
栏 PowerBar的, New”按钮, 打开, New”对话框,
并选择, PB Object”选项卡
双击要创建的用户对象类型即可开始用户对
象的创建 。
用户对象创建之后,对于可视用户对象可
作为控件添加到窗口中,而类用户对象则可用
于声明变量的 PowerScript 语句中
下一页
1,创建标准可视用户对象
,PB Object” 选项卡中双击, Standard
Visual” 图标, 打开, Select Standard
Visual Type”对话框, 从该对话框的, Types”
列表中选择一种标准可视控件即可打开用户对
象画板, 开始标准可视用户对象的创建 。
2,创建定制可视用户对象
,PB Object”选项卡中选择, Custom
Visual” 图标,单击, OK” 按钮。
返回 下一页上一页
3,创建外部可视用户对象
,PB Object”选项卡中选择, External Visual” 图标,
单击, OK”按钮,
? 然后进行如下操作:
① 在属性对话框的, LibraryName”编辑框中键入用作外部
用户对象的 DLL文件名, 或者单击编辑器右边的,,..”
( 生成器 ) 按钮, 从打开的, Select Custom Control
DLL”对话框中选择 DLL文件 。
② 在, ClassName”编辑框中键入 DLL中的注册类名 ( 该类名
通常由生产 DLL的厂商提供 ) 。
③ 在, Text”编辑框中输入显示在控件上的文本以及其它必
要的属性 。
④ 声明用户对象所需要的函数, 事件, 变量, 结构 。
⑤ 编写用户对象的事件处理程序 。
⑥从, File”菜单中选择, Save”项保存用户对象
返回 下一页上一页
4,创建标准类用户对象
?, PB Object” 选 项 卡 中 选 择, Standard
Class” 图标, 打开, Select Standard Class
Type”对话框, 从该对话框的, Types”列表中
选择要创建的用户对象所继承的内部系统对象,
然后单击, OK”按钮, 即可打开用户对象画板,
开始标准类对象的创建 。
? 在用户对象画板中进行如下操作:
① 声明用户对象所需的函数, 事件, 变量, 结
构 。
② 编写所需的各种事件处理程序 。
③ 从, File”菜单中选择, Save”项保存用户对
象 。
返回 下一页上一页
5,创建定制类用户对象
,PB Object”选项卡中选择, Custom Class”
图标, 打开用户对象画板 。
① 声明用户对象所需的函数, 事件, 变量, 结
构 。
② 编写用户对象所需的各种事件处理程序 。
③ 从, File”菜单中选择, Save”项保存用户对
象 。
定制类用户对象不继承 PowerBuilder内部系
统对象, 完全由设计人员通过定义实例变量,
函数, 事件来实现 。
返回 上一页
2.4.3 使用用户对象
1,使用可视用户对象
把可视用户对象放置到窗口上, 可按下列步骤
行:
① 打开需要的窗口 。
② 在窗口画板的 PaintBar工具栏中, 从控件图标
列表中选择, User Object”图标, 打开, Select
Object”对话框 。
③ 在, Select Object” 对话框中, 从
,Application Libraries”列表中选择用户对象
所在的库文件, 此时可用的用户对象将显示在
,User Objects”下面的列表框中, 从中选择所
需的用户对象, 然后单击, OK”按钮 。
④ 在窗口画板的, Layout”视图区上, 单击放置用
户对象的位置, 用户对象即出现在窗口上 。
返回 下一页
2,使用类用户对象
使用类用户对象时, 需要在代码中创建它的
一个实例, 步骤为:
① 声明类用户对象的实例变量, 用 CREATE
语句创建该对象的一个实例 。
② 在变量的整个作用域中, 代码都能访问
该对象的属性, 事件, 函数, 引用方法与使
用系统预定义对象 (例如事务对象 )相同 。
③ 不再使用该用户对象时, 使用 DESTROY语
句删除该对象, 以释放它所占用的内存 。
返回 下一页
上一页
上一页
3,窗口与用户对象间的通信
窗口与用户对象之间通常需要交换信息 。
窗口与可视用户对象之间交换信息的主要方
式, 一是使用函数, 二是使用用户事件, 三是
直接引用用户对象属性 。
使用函数进行信息交换时, 可以定义全局
( Public) 函数, 利用全局函数把用户对象内
部信息传递给窗口, 或把窗口信息传递到用户
对象内部 。
使用用户事件进行信息交换时, 可以为用户
对象定义一些用户事件以及相应的参数, 这样
可以通过编写事件处理程序或触发事件完成用
户与窗口之间的通信 。
返回 上一页
2.4.4 用户事件
具体来说, 用户事件适用于以下场合:
(1)解决用户对象与窗口之间的通信问题 。
用户事件可以通过参数进行信息传递 。
(2)响应特殊操作, 这些操作没有相应的
PowerBuilder预定义事件 。
(3)支持用户通过多种方式完成同一个功
能 。
返回 下一页
1,定义用户事件
在 PowerBuilder中, 为窗口, 控件, 用户对象
定义用户事件的方法都是一样的 。
? 具体操作步骤如下:
① 打开要定义用户事件的窗口或用户对象 。
② 在窗口画板或用户对象画板中, 双击窗口,
控件或用户对象, 或选择, View”菜单中的
,Script”项, 打开脚本视图 。
③ 在脚本视图中, 第二个下拉列表框即为事件
列表框, 从中选择, New Evernt”项, 则脚本视
图如图 2.16所示 。
④ 在脚本视图的原型部分中定义用户事件的原
型 。
⑤ 为所定义的事件编写实现其功能的代码并保
存 。 返回 下一页上一页
? 2,几点说明
? (1)参数传递方式
? 值传递:该方式将调用者的变量复制一份传递
给被调用者 。 多用于传递简单数据, 而对于复
杂数据, 如结构, 对象等, 由于参数的复制增
加了调用开销, 从而降低了程序效率 。 采用值
传递方式时, 被调用者不能通过参数修改调用
数据 。
? 引用传递:该方式将调用者变量的指针传递给
被调用者, 从而可以在被调用者中修改调用者
数据 。 此方式仅传递一个地址, 对任何数据类
型的传递, 其系统开销相同 。
? 只读传递:该传递方式结合了值传递和引用传
递的特点, 既具有值传递的被调用者不能修改
调用者所传递参数的特点, 又具有引用传递系
统开销较小的特点 。 返回 下一页上一页
2)事件标识 (Event ID)
每个事件标识对应于 PowerBuilder的一个
事件 。 而 PowerBuilder的每个事件, 都对应于
特定的 Windows消息 。 两者关系可以从事件标
识名称的后半部推断 。 例如, pbm_mousemove
对应于 Windows 消息 wm_mousemove,
pbm_keydown对应于 Windows 消息 wm_keydown。
(3)自定义事件
当需要定义只能由代码触发的用户事件
时,在, Event ID”下拉列表框中选择, None”,
这样就定义了自定义事件。此时,可以为用户
事件定义参数。对于事件参数的修改、删除和
添加,都可以通过快捷菜单来完成
返回 下一页上一页
(4) Other事件
如果应用程序对象需要调用某
个 Windows 消息, 而 该 消 息 没 有
PowerBuilder事件标识与其对应, 那
么可以在该对象的 Other事件中处理该
消息 。 PowerBuilder把除该对象已定
义事件外的所有 Windows 消息都映射
到 Other事件 。 通过编写代码和查阅
Message对象的属性, 可以处理特定的
Windows 消息 。
返回 下一页上一页
? 3,使用用户事件
① 编写用户事件的处理程序 。 没有事件处理程
序时, 即使发生了该事件, 也不做任何处理,
程序可在定义用户事件的同时进行编写 。
② 必要时编写触发用户事件的代码 。
4,删除用户事件
返回 上一页
2.5 对象的继承
使用继承, 我们可以从已经建好的窗
口, 用户对象, 菜单等对象出发派生
它的子对象 。 派生出子对象的对象被
称之为祖先, 而对由祖先派生出来的
对象, 被称之为后代 。 后代将继承祖
先所有的特性和程序 。
返回 下一页
2.5.1 使用继承创建窗口
在 PowerBar工具栏上单击, Inherit”按钮,
,Inherit from Object”对话框, 让我们选择
要继承的对象 。
在, Target”下拉列表中选择需要的目标 。
如果该目标对应有多个对象库, 可选择一个
对象库 。
在, Objets of Type”下拉列表中选择窗口对
象类型或全部对象 ( All Objects), 然后选
择要继承的窗口对象, 最后单击, OK”按钮,
进入窗口画板 。
可以象打开普通窗口一样打开后代窗口,
进行属性修改和代码编
下一页返回 上一页
? 在窗口上面单击鼠标的右键, 在弹出菜单中选择
,Script”命令, 可以打开脚本视图对指定的事件进行
编码 。
? 如果要扩展祖先脚本, 可选中, Edit”菜单当中的
,Extend ancestor script”项, 如果该菜单项未被选
中, 就表示重载祖先的脚本 。
? 在 PowerBuilder中, 继承的层次可以有多层, 就是说
一个后代对象可以有父亲, 祖父或者更高层次的祖先 。
在为后代对象编写脚本的时候, 我们可以调用任何祖
先对象当中已经写好的脚本 。 比方说调用父对象中的
,clicked”事件的脚本, 可以输入下面这样的代码:
? call super::clicked
? 而调用更高层次祖先的的脚本的时候就必须标出祖先
对象的名字, 如:
? w_ancestor::clicked
下一页返回 上一页
2.5.2 使用继承创建用户对象
通过继承一个已有的用户对象创建新用户对象,
方法与继承窗口类似 。
,Open”用来打开用户的文本文件, 并且在多
行编辑框中显示文件的内容 。
,Close”用来显示关闭提示消息框, 然后关闭
窗口 。
具体方法是:
首先在 PowerBar工具栏上单击, Inherit”按钮,
,Inherit from Object”对话框 。
在对话框中选择需要的目标和对象库 。
在, Objets of Type”下拉列表中选择对象类
型, User Objects”,然后选择要继承的用户
对象, 最后单击, OK”按钮, 进入用户对象画
板 。 返回 上一页
2.6 简单应用举例
? 【 例 2.1】 动画演示 。
? ① 建立文件夹, 准备图形文件
? 进入 Powerbuilder 8.0,在 PowerBar工具栏上
单击, library”按钮, 在左边窗格中选择要建
立文件夹的驱动器或目录, 右击鼠标, 在弹出
的快捷菜单中选, New Folder”,输入文件夹
名, 动画, 。
? ② 打开工作空间
? 在 PowerBar工具栏上单击, library”按钮, 在
左边窗格中找到需要打开的工作空间文件, 右
击工作空间文件, 在弹出的快捷菜单中选
,Open Workspace”项, 该工作空间即被打开 。
下一页返回
③ 建立应用程序对象, 库和目标
在 PowerBar工具栏上单击, New”按钮, 在
,New”对话框中选, Target”选项卡, 选中
,application”图标, 单击, OK”按钮, 在弹
出的对话框中指定, Application Name”、
,library”和, Target”如图 2.18所示 。 单击
,Finish”按钮, 便同时建立了目标 dh.pbt、
对象库 dh.pbl和应用程序对象 dh
④ 建立窗口
在 PowerBar工具栏上单击, New”按钮,在
,New”对话框中选, PB Object”选项卡,选中
,Window”图标,单击, OK”按钮,出现窗口画
板。
下一页返回 上一页
⑤ 编码
在窗口布局视图中, 双击, 播放, 命令按钮, 打开脚
本视图, 选择, clicked”事件, 编写如下代码:
if cb_1.text="播放 " then
cb_1.text="停止 "
timer(0.2)
else
cb_1.text="播放 "
timer(0)
end if
最后, 打开应用程序对象, 在, open”事件中输入
一行代码,open(w_main)。
⑥ 运行
在 PowerBar工具栏上单击, Select and Run”按钮,
选择目标, dh”,程序开始运行 。 单击, 播放, 按钮,
下一页返回 上一页
【 例 2.2】 图形文件查找和显示 。
本例要建立一个窗口, 窗口上带有一个菜单
和一个工具栏 。 通过主菜单, 快捷菜单和工具
栏按钮任意一种方式, 可以查找图形文件所在
目录, 将图形文件名添加到列表框, 按原始 大
小和比例放大两种方式显示图形 。
① 准备
按前面介绍的方法建立一个, 图形文件,
文件夹,打开或建立工作空间,建立目标
txwj.pbt、对象库 txwj.pbl和应用程序对象
txwj。
下一页返回 上一页
② 设计窗口布局
创建一个新窗口, 在窗口画板中设计如图
2.21所示的布局, 保存为, w_exercise”。
③ 对窗口控件的编码
在窗口布局视图中, 双击列表框 lb_file,打
开脚本视图, 对默认的, selectionchanged”
事件编写如下代码:
integer i
FOR i = 1 to lb_file.TotalItems()
IF lb_file.State(i) = 1 THEN
p_1.picturename = lb_file.Text(i)
exit
下一页返回本节 上一页
本章到此结束
返回