Database 版 (精华区)

发信人: lizhenguo (夸父·追日), 信区: Database
标  题: 37
发信站: 哈工大紫丁香 (2001年09月26日18:48:38 星期三), 站内信件

 bbs.hit.edu.cn
PowerBuilder专栏
[回到开始][上一层][下一篇]
----------------------------------------------------------------------------
----
发信人: carsam (独自偷...), 信区: Database
标 题: PowerBuilder应用开发系列讲座(37)
发信站: 逸仙时空 Yat-sen Channel (Wed Jan 5 12:38:00 2000), 站内信件
PowerBuilder应用开发系列讲座(37)
----------------------------------------------------------------------------

----
PFC 介绍
   PFC 是PowerBuilder 高 级 开 发 工 具 集 中 的 一 个 基 本 类 库,提 供
了 进 行 一 般 应 用 开 发 时 会 经 常 用 到 的 对 象 和 函 数 代码。PowerBu

ilder 5.0 的 基 本 类 库 中 的 内 容 十 分 丰 富, 比 以 前版 本 中 所 提 供

的 功 能 要 增 加 了 许 多, 而 且 对 象 之 间 的 继承 和 引 用 关 系 也 比
以 前 更 为 清 晰 合 理。 因 此 编 写 一 个 完全 建 构 在PFC 类 库 之 上 的
应 用 可 大 大 提 高 软 件 质 量, 而 且利 用 基 类 的 已 有 代 码 也 会 使
得 许 多 复 杂 的 功 能 实 现 起 来要 轻 松 得 多。 可 是 如 何 编 写 这 样
的 应 用, 以 合 理 地 继 承、利 用 和 改 造PFC 的 基 本 框 架, 以 及 使 用

PFC 时 应 注 意 的 事 项,却 是 十 分 复 杂 的 问 题, 在 这 里 无 法 用 几
千 字 就 能 够 讲 清楚。 不 过 我 们 仍 然 能 够 像 使 用 以 往 版 本 的 类
库 一 样, 只 是借 用PFC 中 一 些 对 象 的 基 本 功 能 以 省 去 自 己 编 写
代 码 的 麻烦。
   本 文 将 主 要 介 绍 如 何 利 用PFC 中 几 个 数 据 窗 口 功 能,为 我 们

的 编 程 带 来 便 利。
   我 们 在 应 用 中 会 遇 到 层 次 型 关 系 的 数 据, 例 如 部 门和 雇 员

实 体 之 间 的 关 系。 在 对 一 个 部 门 下 雇 员 的 数 据 进行 维 护 时,
可 以 使 用Master/Detail 的 表 现 形 式, 在 数 据 窗 口dw_1 表 现 已 有 部
门 的 数 据, 并 根 据 用 户 选 择 的 某 一 条 记 录, 在dw_2 中 变 换 所 选

定 部 门 雇 员 的 信 息, 并 对 雇 员 信 息 进 行 维 护。
   首 先 声 明 一 个 全 局 变 量:
   n_cst_appmanager gnv_app
   在 应 用 的Open 事 件 中 加 入:
   gnv_app = CREATE n_cst_appmanager
   gnv_app.Event pfc_Open(commandline)
   在 应 用 的Close 事 件 中 键 入:
   gnv_app.Event pfc_Close( )
   DESTROY n_cst_appmanager
   在 窗 口 中 我 们 定 义dw_1 和dw_2 为PFC 中u_dw 的 实 例 对 象,在 窗 口

的Open 事 件 中 我 们 编 程 如 下:
// 设 置dw_1 和dw_2 的 级 联 方 式
dw_1.of_setlinkage(true)
dw_2.of_setlinkage(true)
dw_1.of_settransobject(sqlca)
dw_2.of_settransobject(sqlca)
// 定 义dw_1 和dw_2 的 级 联 关 系
dw_2.inv_linkage.of_linkto(dw_1)
dw_2.inv_linkage.of_setarguments("dept","dept")
dw_2.inv_linkage.of_setusecollinks(1) // 设 置 连 接 方 式 为filter
// 触 发dw_2 的pfc_retrieve() 事 件
dw_2.event pfc_retrieve()
if dw_1.event pfc_retrieve() = -1 then
messagebox(" 错 误"," 提 取 数 据 错 误-- 类 别")
else
dw_1.setfocus()
end if
在dw_1 和dw_2 的pfc_retrieve
事 件 中 将 祖 先 的 代 码 覆 盖, 并 分 别 写 下 如 下 语 句:
return this.retrieve()
   在dw_1 的rowfocuschanged 事 件 代 码 中 将 对 该 数 据 窗 口 的数 据 进

行 过 滤, 而 执 行retrieve() 函 数 将 触 发 这 一 事 件。
   使 用PFC 中 这 个 对 象 的 优 点 还 可 以 体 现 在 以 下 两 点:当 需 要

更 新 级 联 的 所 有 数 据 窗 口 时, 只 需 执 行dw_1.inv_linkage.of_update
() 一 条 命 令 即 可 完 成; 如 果 想 要 在dw_2 中 增 加 一 行 新 数 据,可
使 用dw_2.pfc_addrow(0) 或dw_2.pfc_insertrow() 函 数, 这 个 函 数 会将dw_2
中dept 字 段 的 值 自 动 设 置 为dw_1 中dept 的 当 前 值, 从 而避 免 了 手
工 使 用GetItem 和SetItem 函 数 来 设 置。
   在 上 述 简 单 的 关 系 中, 并 未 充 分 体 现 出PFC 优 越 性。但 在 一

个 工 厂 中 对 零 件 的 管 理 或 是 大 型 商 场 中 对 商 品 的管 理, 往 往
是 要 通 过 多 次 的 级 联 才 能 定 位 到 某 一 类 产 品的 子 目, 在 这 样
的 系 统 中, 拥 有 一 个 像u_dw 这 样 的 基 类, 编程 的 效 率 就 可 以 提
高 许 多。
   在 一 个 数 据 窗 口 中 如 果 有 的 列 含 有 下 拉 式 数 据 窗口 时, 在

这 些 列 中 使 用 下 拉 搜 索 功 能 会 给 用 户 带 来 很 多方 便, 也 就 是
说 在 这 些 列 中 当 用 户 使 用 键 盘 敲 入 数 据 时,应 用 程 序 自 动 地
搜 索 下 拉 式 数 据 窗 口 中 对 应 的 值, 使 其跳 转 到 相 应 的 记 录 上
。 使 用PFC, 我 们 只 需 指 定 这 个 数 据 窗口 继 承n_cst_dwsrv_dropdownse

arch 对 象, 并 在 这 个 数 据 窗 口 中 键入 下 列 代 码:
constructor 事 件:
dw_1.of_setdropdownsearch(true)
dw_1.inv_dropdownsearch.of_addcolumn()
editchanged 事 件:
inv_dropdownsearch.event pfc_editchanged (row,dwo,data)
   这 个 数 据 窗 口 中 所 有 的 下 拉 式 数 据 窗 口 就 都 具 备了 下 拉
搜 索 功 能。 不 过 我 们 要 对 这 个PFC 对 象 进 行 改 进, 以适 应 中 国 国

情。 原 有 的 搜 索 功 能 是 要 求 用 户 在 该 列 中 输入 下 拉 式 数 据 窗
口 的 显 示 值(display column) 才 能 查 询, 这 对于 使 用 拼 音 文 字 的 用

户 是 十 分 方 便 的, 应 用 将 随 着 用 户输 入 字 符 的 增 多, 逐 步 递
进 地 显 示 相 应 的 记 录。 可 是 在 中文 应 用 软 件 中, 该 列 的 显 示 值

一 般 都 为 中 文, 输 入 并 不 方便, 所 以 有 经 验 的 操 作 员 往 往 习
惯 于 使 用 他 们 熟 悉 的 编号, 即 下 拉 式 数 据 窗 口 的 实 际 存 储 值(

data column), 因 此 将应 用 程 序 做 成 对 实 际 值 进 行 查 询 也 许 更 符

合 中 国 用 户 的习 惯。 我 们 就 需 要 在n_cst_dwsrv_dropdownsearch 中 的p
fc_editchanged 事 件 中 作 如 下 修 改:
   覆 盖 祖 先 类 的 代 码, 键 入 新 代 码。 新 代 码 是 对 它 的祖 先 对

象pfc_ n_cst_dwsrv_dropdownsearch 中pfc_editchanged 事 件 的 代码 作 部 分
修 改, 将 其 中 第72 行
ls_dddw_displaycol = adwo_obj.dddw.displaycolumn
改 为:
ls_dddw_displaycol = adwo_obj.dddw.datacolumn
   即 可。( 因 代 码 过 长, 我 们 无 法 在 这 里 全 部 引 述。)
   3. 使 用PFC 中 有 关 数 据 窗 口 打 印 的 功 能。 在u_dw 对 象中 还 提
供 了 一 些 有 关 打 印 的 事 件 和 函 数, 我 们 首 先 在 数据 窗 口 的 构
造 事 件 或 窗 口 的Open 事 件 中, 将 数 据 窗 口 设 置允 许 打 印 预 览:
dw_1.of_setprintpreview(true)。
   我 们 可 以 在 程 序 中 调 用dw_1.event pfc_print()、dw_1.event pfc_pri

ntpreview()、dw_1.event pfc_pagesetup()、dw_1.event pfc_zoom() 分别 用 来 实

现 打 印、 打 印 预 览、 页 面 设 置、 预 览 窗 口 的 放 大缩 小 等 功 能。
在 这 些 功 能 中,PowerBuilder 会 自 动 弹 出 相 应 的窗 口, 由 用 户 设
置 打 印 的 份 数, 页 面 纸 张 的 大 小, 预 览 窗口 的 显 示 比 例 等 参 数


   此 外 在 窗 口 对 象 中PFC 提 供 了response 风 格 窗 口 的 祖 先类w_res

ponse, 其 中 加 入 一 些 用 户 可 能 经 常 用 到 的 功 能。 例如 只 需 在 继

承 窗 口 的open 事 件 中 加 入 如 下 语 句:this.inv_base.of_center(),可 实

现 该 窗 口 在 打 开 时 窗 口 在 屏 幕 的 正 中 位 置 显 示; 又如 在open 事

件 中 加 入: this.of_setbase(true), 每 个 继 承 窗 口 缺省 都 有 数 据 数
据 窗 口 存 储 功 能 等 等。
--
我想自由自在地飞......
飞过大海...
飞过沙漠...
飞翔在星的夜空......
※ 来源:.逸仙时空 Yat-sen Channel bbs.zsu.edu.cn.[FROM: 202.116.90.29]
----------------------------------------------------------------------------
----
[回到开始][上一层][下一篇]
欢迎访问Cterm主页

--
《列子·汤问》:“夸父不量力,欲追日影,逐之于隅谷之际。渴欲 得饮,赴饮河渭
。河渭不足,将走北饮大泽。未至,道渴而死。”

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.154]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.533毫秒