第 5章 通讯录管理器
本章介绍一个用于通讯录管理的软件, 我们称
之为 通讯录管理器 。 该软件具有对通讯录信息
的 增, 删, 改, 查, 排序, 打印 等功能, 以 单
文档界面 和 多文档界面 两种形式实现 。 涉及的
主要技术包括 数据窗口缓冲区的共享, 用回车
键实现 TAB键功能, 多条件查询, 多文档界面
的实现, 窗口之间的参数传递, 结构的应用,
图片的使用 等 。
下面让我们学习这一章内容:
5.1 基础工作
5.2 单文档界面程序
5.3 多文档界面程序
5.1.1 建立文件夹, 准备图片文件
5.1.2 建立或打开工作空间 (注:此节从略 )
5.1.3 建立应用程序对象, 库和目标
5.1.4 创建数据库和表
返回
5.1.1 建立文件夹、准备图片文件
1,为便于管理, 我们为通讯录管理建立一
个专门的文件夹, 取名为, txl”。
2,建立文件夹的操作可以在操作系统下进
行, 也可以在 Powerbuilder 8.0中进行 。
3,把有关人员照片的图形文件放到文件夹
txl中, 照片图形文件的扩展名为 gif,文
件名用人员的姓名 。
返回
5.1.3 建立应用程序对象、库和目标
? 建立目标 txl_s.pbt,对象库 txl_s.pbl
和应用程序对象 txl_s。
? 建立的目标 txl_s.pbt,对象库
txl_s.pbl和应用程序对象 txl_s,用来
设计单文档界面的通讯录管理软件 。
? 用同样的方法, 再建立目标 txl_m.pbt、
对象库 txl_m.pbl和应用程序对象 txl_m,
用来设计多文档界面的通讯录管理软件 。
返回
5.1.4 创建数据库和表
? 在 PowerBuilder 8.0 中 创 建 一 个 Adaptive Server
Anywhere 7.0数据库 。
? 配置 ODBC数据源, txl”和描述文件, txl”并进行连接 。
? 在数据库已经连接的情况下, 可以建立存储通讯录信
息的表 。
? 我们只 定义一个表, 命名为, txl”,表结构如表 5.1所
示 。
? 表建立之后, 要 建立主键 。 主键是能够唯一标识每一
行数据的一列或若干列的组合 。 最后, 我们还要为每
一列 设置标题或标签属性, 以简化设计数据窗口对象
时的操作 。 表结构如表 5.1所示 返回
字段名 类型 宽度 含义
xm char 6 姓名, 不允许空, 主关键字
zw char 12 职务
zc char 12 职称
gzdw char 40 工作单位
txdz char 40 通讯地址
yzbm char 6 邮政编码
dwdh char 20 单位电话
zzdh char 20 住宅电话
fbtz char 9 分编特征
表 5.1 txl表结构
返回
5.2 单文档界面程序
我们先来设计一个单文档界面的通讯录管理系
统 。 其 基本设计思想 是:在一个窗口当中, 通
讯录信息以, 网格, 和, 自由表, 两种形式显
示, 网格形式便于同时查看多条记录, 自由表
形式可以显示任意一条记录的所有字段信息,
两种形式具有互补性 。 该窗口将对通讯录信息
的 增, 删, 改, 查, 排序, 打印 等功能集于一
体, 可以满足通讯录管理和使用的基本要求 。
返回
? 5.2.1 数据窗口对象设计
? 5.2.2 窗口设计
? 5.2.3 编码
? 5.2.4 运行
返回
5.2.1 数据窗口对象设计
根据设计基本想法, 我们要建立 两个数
据窗口对象, 一个 自由表样式, 另一个
为 网格样式 。
返回
5.2.2 窗口设计
? 在属性视图的, General”标签页中, 设置 Title
为, 通讯录,, 不使用菜单, 取消最大化按钮
复选标记, 在 Window Type下拉列表中选择窗
口类型为 main!,在 WindowState下拉列表中选
择窗口的初始状态为 normal,BackColor设置
为 silver。
? 在窗口上放置两个数据窗口控件 dw_1和 dw_2,
分别设置他们的 DataObject属性为, d_wg”和
,d_zy”,窗口上放置的其它控件包括:一个
分组框, 里边放三个单选按钮 rb_1,rb_2和
rb_3,分别控制按, 姓名,,, 分编, 和, 地
址, 排序 。 单
行编辑框 sle_1,sle_2和 sle_5分别用来输入按
,姓名,,, 分编, 和, 地址, 查询的内容,
sle_3和 sle_4用来显示当前行 ( 记录 ) 号和总
行 ( 记录 ) 数 。 命令按钮有, 新增,,, 删
除,,, 保存,,, 打印,,, 设置,,, 开
始查询, 和, 退出,, 分别实现相应的功能 。
? 用类似的方法设置各控件必要的属性, 排列控
件并调整窗口大小 。
? 最后, 将窗口保存到对象库 txl_s.pbl中 。
返回
5.2.3 编码
1,应用程序对象编码
2,窗口 w_main的 open事件 ( 本节从略 )
3,窗口 w_main的 closequery事件 ( 本节
从略 )
4,单选按钮 rb_1,rb_2,rb_3的 clicked
事件 ( 本节从略 )
5,数据窗口控件 dw_1的 rowfocuschan-
ged事件 ( 本节从略 )
返回
? 首先打开应用程序对象 txl_s,方法有以下几种:
? 【 方法 1】 在 PowerBuilder主工具栏上, 单击, System
Tree”按钮, 打开, System Tree”视图, 在当前工作空
间中找到目标 txl_s,对象库 txl_s.pbl和应用程序对象
txl_s,在应用程序对象上用鼠标双击 。
? 【 方法 2】 在 PowerBuilder主工具栏上, 单击, Library”
按钮, 打开, Library”视图, 找到需要的驱动器, 文件
夹, 对象库 txl_s.pbl和应用程序对象 txl_s,在应用程序
对象上用鼠标双击 。
? 【 方法 3】 在 PowerBuilder主工具栏上, 单击, Open”
按钮, 打开, Open”对话框, 在, Target”下拉列表选
择目标 txl_s,在, Objects of Type”选择 Applications,
在, Object”列表中选择应用程序对象 txl_s,再单击
,OK”按钮 。
? 在打开的应用程序对象脚本窗口中选择, open”事
件, 编写代码 返回
6,数据窗口控件 dw_1的自定义用户事件
u_enter事件
7., 新增, 按钮的 clicked事件
8., 删除, 按钮的 clicked事件
9., 保存,,, 打印,,, 设置, 和退出,
按钮的 clicked事件
10., 姓名,,, 地址,,, 分编, 三个
单行编辑框和, 开始查找, 按钮的编码
返回
5.2.4 运行
单文档界面的通讯录管理软件 运行 后, 通讯录 信
息 以网格和自由表两种形式 显示 在上下两个 数
据窗口中 。 上面数据窗口可以同时显示多条记
录, 通过水平滚动条可以移动查看不同字段,
记录初始时按, 姓名, 排序 。 光标定位在第一
条记录, 下面数据窗口显示出该记录所有字段
的信息 。
如果单击, 分编, 单选按钮,记录按分编特征
排序。在, 地址, 单行编辑框输入要查找的内
容, 长春,,然后回车或单击, 开始查找, 按

如图 5.13所示
返回
图 5.13 按, 分编, 排序及查找, 长春, 时的结果 返回
5.3 多文档界面程序
多文档界面 ( Multiple Document Intedace,
缩写为 MDI) 是一种十分流行的 界面风格,包括
PowerBuilder,Microsoft Word在内的大多数
商业软件均采用 MDI风格 。 一般来说, 当我们
想同时打开多个窗口, 并且需要在打开的多个
窗口之间切换时, 最好采用这种界面风格, 原
因在于 MDI简化了许多用户界面元素, 它为用
户提供了一种灵活的 操作环境 。 因此, 熟悉和
掌握多文档界面是开发大中型应用程序的基础 。
返回
5.3.1 多文档界面有关知识
5.3.2 菜单 m_frame
5.3.3 MDI框架窗口 w_frame
5.3.4 数据窗口对象 d_wg和 d_zy_arg
5.3.5 定义全局结构 s_txl
5.3.6 工作表窗口 w_wg,w_zy_arg和 w_pic布局
5.3.7 编码与测试
返回
5.3.1 多文档界面有关知识
? 在多文档界面应用程序中, 有一个最先显示的
主窗口叫做 MDI框架窗口, 这个 MDI框架窗口
充当其它窗口的 容器 。 在 MDI框架窗口中打开
的其它窗口称为 工作表 ( Sheet),也有 表单 或
MDI子窗口 的叫法 。 工作表只能在 MDI框架窗
口中移动而不能够被移出框架窗口 。 当工作表
被最大化时,它充满框架窗口 。 当工作表被最小
化时, 它变成图标显示在框架窗口的底部 。
MDI框架窗口中可同时显示多个工作表 。 典型
的 MDI窗口由菜单, 工具栏, 框架, 客户区,
工作表和状态栏六部分组成 。
? 客户区 (Client Area)是指 MDI窗口的工作空间,
在这个空间中可以打开多个工作表窗口 。
? 在 PowerBuilder中提供两种类型的 MDI框架,
分别是标准的 MDI框架和定制的 MDI框架 。 它
们最大的差别是, 当没有任何工作表打开时,
标准的 MDI框架的客户区是空的, 而定制的
MDI框架还可以包括其他的控件, 比如按钮和
静态文本框等 。
创建 MDI框架窗口的 步骤 如下,
返回
创建 MDI框架窗口的 步骤 如下,
① 单击 PowerBuilder工具栏上的, New”按钮, 在弹出的, New”对话
框中选择, PB Object”选项卡中的, Window”项 。 单击, OK”按钮,
这时 PowerBuilder打开 Window画板, 把创建的窗口对象显示在
Window画板中 。
② 在 Window画板的 Properties视图中设置窗口的有关属性 。 其中 Title
文本框用来指定 MDI框架窗口的名字, 在 MenuName文本框用来
指定 MDI框架窗口所使用的菜单, 可以单击右边的浏览 (,,..” )
按钮, 通过浏览来指定菜单 。 需要指出的是, 对于一个 MDI框架
窗口, 一定要指定菜单 。 在 Window Type下拉列表中, 选择窗口
类型, mdi!”或, mdihelp!”。
③ 单击工具拦上的 Save按钮, 把新建的 MDI框架窗口保存起来 。
创建 MDI工作表与创建 MDI框架窗口的步骤基本相同, 不同的是在选
择窗口类型的时候, MDI工作表只能选择, child!”,“main!”或者
,popup!”类型, 而不能选择其他的类型 。 此外, MDI工作表不一
定指定菜单, 而 MDI框架窗口必须要指定一个菜单 。 返回
5.3.2 菜单 m_frame
? 本通讯录管理软件只在多文档界面框架窗口中使用一个如图 5.14
所示的菜单。
下面 对菜单项进行编码 。 返回
5.3.3 MDI框架窗口 w_frame
? 在 Window画板 的 Properties视图 中设置
窗口的 Title为, 通讯录,,MenuName设
置为前面创建的, m_frame”,在
Window Type下拉列表中, 选择 窗口类
型为, mdihelp!”。
? 单击工具拦上的 Save按钮,把 MDI框架
窗口保存到对象库 txl_m.pbl中,命名为
w_frame。
返回
5.3.4 数据窗口对象 d_wg和 d_zy_arg
? 与单文档界面通讯录相仿, 多文档界面应用
程序 也要 使用 两个数据窗口对象, 一个 自由
表样式, 另为一个 网格样式 。
? 网格样式的数据窗口对象与单文档界面的数
据窗口对象 d_wg完全相同 。
? 自由表样式的数据窗口对象与单文档界面的
数据窗口对象 d_zy类似, 但带有检索参数,
取名为 d_zy_arg。
返回
5.3.5 定义全局结构 s_txl
为了在窗口之间 传递多个参数, 我们定义
一个 全局结构 s_txl。
返回
5.3.6 工作表窗口 w_wg,w_zy_arg和
w_pic布局
? 1,工作表窗口 w_wg布局
? 2,工作表窗口 w_zy_arg布局
? 3,工作表窗口 w_pic布局
返回
5.3.7 编码与测试
? 1.应用程序对象编码( 本节从略)
? 2.工作表窗口 w_wg的编码
? 3.显示记录详细数据
? 4.显示照片
返回
2.工作表窗口 w_wg的编码
? 打开窗口 w_wg画板, 进入窗口的脚本视
图 。 在第二个下拉列表中选择事件 open,
编写如下两行代码
? 运行程序, 单击, 系统功能, 菜单的
,通讯录, 项, 或单击工具拦上的, 通
讯录, 按钮
如图 5.22所示 返回
图 5.22 MDI通讯录程序运行时的界面:
返回
3.显示记录详细数据
? 窗口 w_wg打开后, 在数据窗口控件 dw_1中以
网格的形式显示通讯录信息, 在任意一条记录
上双击鼠标, 产生 doubleclicked事件, 通过如
下代码可以打开窗口 w_zy_arg的一个实例, 在
其中显示出该记录的详细数据 。
? 与此相应, 在窗口 w_zy_arg的 open事件中需
要编写如下代码, 接受参数, 显示对应记录的
详细数据 。
? 在图 5.22所示的, 通讯录一览表, 窗口中双击
第一条记录
如图 5.23所示 返回
图 5.23所示的窗口。
返回
4.显示照片
? 窗口 w_wg打开后, 在数据窗口控件 dw_1的任意一条记
录上 右击鼠标, 产生 rbuttondown事件, 通过如下代码
可以 打开窗口 w_pic,在其中显示出该记录的部分数据
和照片 。
? 与之相对应, 在 窗口 w_pic的 open事件中需要编写如下
代码, 接受参数, 显示照片和部分信息 。
? 例如, 在图 5.22所示的, 通讯录一览表, 窗口中右击
姓名为, LI2”的记录, 打开如图 5.24所示 的窗口 。
? 另外, 在 w_wg窗口上还有, 添加,,, 删除,,, 保
存, 和, 退出, 按钮, 窗口 w_zy_arg和 w_pic上也各有
一个, 退出, 按钮, 他们的编码与单文档界面中对应
的按钮代码一样, 不再列出 。
如图 5.24所示 返回
图 5.24 运行时的, 照片, 窗口
返回
本章学习到此结束!
同学们再见!
返回本章首页