Database 版 (精华区)

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

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

----
图形用户界面设计(续)
规 范 性 和 一 致 性
   我 们 经 常 使 用 的 图 形 用 户 界 面, 如Windows、Mac、Xwindow 等, 都

提 供 了 一 套 标 准 的 控 件, 经 常 使 用 计 算 机 的 用 户 可能 已 十 分
了 解 这 些 标 准 控 件 的 用 途, 例 如 一 个 多 选 框 在用 户 用 鼠 标 点
击 后 会 改 变 其 状 态, 当 按 动 滚 动 条 上 的 箭头 时, 屏 幕 将 发 生
滚 动; 当 点 击 单 选 框 时 一 般 系 统 不 会 弹出 一 个 对 话 框, 如 果 不

做 诸 如 点 击 按 钮 或 选 择 菜 单 等 类似 的 操 作, 系 统 也 不 会 进 入
到 一 个 什 么 新 的 操 作 进 程 等等。 在 用 户 用 过 了 大 量 应 用 软 件
后, 用 户 就 会 对 常 见 窗 口的 操 作 建 立 起 一 些 基 本 概 念, 当 他
进 入 一 个 从 未 用 过 的软 件 时, 不 会 束 手 无 策, 而 是 会 因 该 新 软

件 与 已 用 过 的 某些 应 用 相 似, 从 而 对 它 的 使 用 有 一 定 认 识。
这 种 认 识 程 度越 高, 说 明 这 一 软 件 越 直 观, 也 就 是 软 件 的 用 户

界 面 设 计得 越 成 功。
   因 此 每 一 个 程 序 员 都 应 当 意 识 到 他 自 己 所 开 发的 应 用 与
其 他 程 序 员 开 发 的 应 用 都 是 在 同 一 平 台 上, 使用 的 也 是 相 同
的 窗 口 控 件, 用 户 在 其 他 应 用 上 学 到 的 对软 件 的 操 作 方 法 越
多, 可 运 用 在 新 开 发 的 应 用 上 的 也 就越 多。 如 果 使 用 标 准 的 方

法, 用 户 会 感 到 越 方 便, 尽 管 他们 并 不 一 定 能 意 识 到 方 便 的
原 因 所 在。
   作 为 一 个 程 序 员 首 先 应 当 了 解 窗 口 中 不 同 控 件的 作 用, 不

少PowerBuilder 的 程 序 员 都 在DOS 或Mainframe 的 字 符终 端 上 开 发 过 应

用 软 件, 而 对Windows 的 图 形 界 面 却 比 较 陌生。 因 此 作 为 程 序 员
熟 悉 使 用 怎 样 的 控 件 来 完 成 怎 样 的功 能 是 至 关 重 要 的。 当 一
个 程 序 员 用 错 了 所 应 使 用 的 控件 时, 应 用 也 不 可 能 是 很 直 观
的。
   保 持 一 致 是 使 应 用 直 观 的 重 要 环 关。 一 致 性 既包 括 使 用 标

准 的 控 件, 也 是 指 使 用 相 同 的 信 息 表 现 方 法,如 在 字 体、 标 签

风 格、 颜 色、 术 语、 显 示 错 误 信 息 等 方 面确 保 一 致。 下 面 是 显
示 信 息 时 应 当 遵 循 的 一 致 性 标 准:
标 签 提 示: 字 体 为 加 重、 宋 体、 黑 色、 灰 底 或 透 明、 无边 框。 右

对 齐 并 带 有 冒 号 结 束。 如“ 姓 名:”;
日 期: 正 常 字 体、 宋 体、 白 底 黑 字,3-D lowered;
对 齐 方 法:
左 对 齐: 一 般 文 字、 单 个 数 字、 日 期 等。
右 对 齐: 数 字、 时 间、 日 期 加 时 间。
   对 于 这 些 信 息 的 排 列 大 部 分 都 是 由 程 序 员 来 控制 的, 上 述

显 示 风 格 也 仅 供 参 考, 更 为 重 要 的 是 程 序 员 应当 注 意 在 同 一
软 件 中 表 现 形 式 的 一 致 性。 如 果 在 同 一 个应 用 中, 这 些 信 息
的 表 现 方 式 不 一 致, 会 使 得 用 户 分 散 注意 力, 因 而 影 响 这 一 软

件 的 使 用。
   遵 循 了 上 述 一 致 性 原 则 后, 还 应 注 意 在 一 个 窗口 内 部 所 有

控 件 的 布 局 和 信 息 组 织 的 艺 术 性, 使 得 用 户界 面 美 观。 在 一
个 窗 口 中 按tab 键, 移 动 聚 焦 的 顺 序 不 能 杂乱 无 章, 在 字 符 界 面

下, 如DOS 中,tab order 的 顺 序 是 先 从 左至 右, 后 从 上 至 下, 而 在
Windows 中 的 顺 序 则 一 般 应 先 从 上至 下 再 从 左 至 右。 一 屏 中 首 先

应 输 入 的 和 重 要 信 息 的 控件 在tab 顺 序 中 应 当 靠 前, 位 置 也 应
放 在 窗 口 上 部 较 醒 目的 位 置。
   MS Windows 应 用 中 应 当 遵 循 的 规 则 还 有 一 条 是 可不 用 鼠 标 的

原 则: 应 用 中 的 每 一 个 功 能 只 用 键 盘 也 应 当可 以 完 成, 也 就
是 说 在 设 计 的 应 用 中 还 应 加 入 一 些 必 要的 按 钮 和 菜 单 项。 但
是, 许 多 鼠 标 的 操 作, 如 双 击、 拖 动对 象 等, 并 不 能 简 单 地 用
键 盘 来 模 拟 即 可 实 现, 例 如 在 一个 列 表 框 中 用 鼠 标 双 击 其 中
一 项 可 以 表 示 选 中 该 项 内 容;为 了 用 键 盘 也 能 实 现 这 一 功 能,

必 须 在 窗 口 中 定 义 一 个表 示 选 中 的 按 钮, 以 作 为 实 现 双 击 功
能 的 替 代。 又 如 在 一个 窗 口 中 有 两 个 数 据 窗 口, 可 以 用 鼠 标
从 一 个 数 据 窗 口中 将 一 项 拖 出 然 后 放 到 另 一 个 中; 如 果 只 用
键 盘, 就 应 当在 菜 单 中 设 置 拷 贝 或 移 动 的 菜 单 项。
   在 菜 单 项 中 使 用 快 捷 键 可 以 让 使 用 键 盘 的 用 户操 作 更 快
一 些, 在 西 文Windows 及 其 应 用 软 件 中 快 捷 键 的 使用 大 多 是 一 致

的。
   面 向 事 务 的:
Ctrl-D   删 除
Ctrl-F   寻 找
Ctrl-I   插 入
Ctrl-N   新 记 录
Ctrl-S   保 存
   查 询/ 列 表:
Ctrl-O
Ctrl-R
   其 它:
Ctrl-C   拷 贝
Ctrl-H   帮 助
Ctrl-P   打 印
Ctrl-V   粘 贴
Ctrl-W   关 闭
Ctrl-X   剪 切
   MS Windows 保 留 键:
Ctrl-Tab   下 一 窗 口
Ctrl-Esc   任 务 列 表
Ctrl-F4   关 闭 窗 口
Alt-F4   结 束 应 用
Alt-Tab   下 一 应 用
Enter   缺 省 按 钮/ 确 认 操 作
Esc   取 消 按 钮/ 取 消 操 作
Shift-F1   上 下 文 相 关 帮 助    这 些 快 捷 键 也 可以 作 为 开 发 中

文 应 用 软 件 的 标 准, 但 使 用 汉 语 拼 音 的 开头 字 母 亦 可。
安 全 的 应 用 软 件
   在 应 用 软 件 的 开 发 中, 重 要 的 一 个 因 素 是 要 给用 户 提 供 一

个 安 全 的 工 作 环 境, 在 软 件 中 不 应 藏 有 任 何地 雷, 在 用 户 将
要 作 破 坏 性 的 且 难 以 恢 复 的 操 作 时, 系 统应 当 给 以 应 有 的 提
示。 用 户 只 有 充 分 相 信 软 件 是 安 全 的,才 会 乐 于 使 用 它, 才 会

放 心 地 去 探 索 这 一 软 件 所 提 供 的新 功 能, 才 能 更 高 效 地 使 用
它。
   什 么 是 安 全 的 应 用
   首 先 最 重 要 的, 但 也 是 最 不 容 易 实 现 的 是 排 除 可能 会 使 应

用 非 正 常 中 止 的 错 误。 在 任 何 情 况 下, 最 终 用 户都 不 应 看 到
应 用 出 现 保 护 性 错 误 而 退 出 系 统, 这 种 错 误最 容 易 使 用 户 对
软 件 失 去 信 心。 因 为 这 意 味 着 用 户 要 中断 思 路, 并 费 时 费 力 地

重 新 登 录, 而 且 已 进 行 的 操 作 也 会因 没 有 存 盘 而 全 部 丢 失。
当 然 造 成 系 统 中 止 的 原 因 很 多,可 能 是 网 络、 硬 件、 系 统 软 件

或 是PowerBuilder 本 身 的 问 题,但 是 开 发 者 应 当 尽 量 周 全 地 考 虑
到 各 种 可 能 发 生 的 问 题,使 出 错 的 可 能 降 至 最 小。 特 别 是 使
用PowerBuilder 开 发 的 软件 的 确 经 常 会 出 现 保 护 性 错 误, 但 是 开
发 人 员 却 不 能 因此 怨 天 尤 人, 而 是 要 多 做 测 试, 选 择 最 为 保 险

的 方 法 实 现相 同 的 功 能。
   此 外, 在 使 用PowerBuilder 编 程 时, 还 有 一 种 常 见 的导 致 非 正

常 中 止 的 情 况 是 由 于 程 序 员 自 己 的 原 因 造 成 的,这 就 是 变 量
联 接 滞 后 问 题, 即 在 编 译 时 定 义 一 个 有 效 的对 象 类, 但 是 在
运 行 时 却 没 有 创 建 它 的 实 例 或 这 个 实 例已 释 放(destroy); 这 时

如 有 一 段 代 码 引 用 到 这 一 对 象, 系统 却 无 法 在 内 存 中 找 到 它
的 实 例, 而 导 致 中 止。 因 此, 在引 用 变 量 时, 应 当 首 先 检 查 它
是 否 存 在 实 例, 例 如 在 一 个窗 口 中 引 用 了 另 外 一 个 窗 口 的 对
象, 就 应 首 先 检 测 它 在执 行 代 码 之 前 是 否 已 经 创 建 了 一 个 实
例。
   在 下 面 的 例 子 中,win_A 这 一 窗 口 对 象 可 能 在 代 码执 行 时 并

没 有 创 建, 因 此 我 们 就 应 当 在 执 行 前 用IsValid 函数 来 检 查 其 是

否 有 效:
IF IsValid(win_A) THEN
Close(win_A)
END IF
   使 用 数 据 窗 口 中 应 注 意 的 问 题
   PowerBuilder 的 代 码 将 引 用 很 多 数 据 窗 口 中 的 列, 指代 这 一
列 的 方 法 可 以 是 列 名 也 可 以 是 列 号。 列 号 是 指 这一 个 数 据 窗
口 在 执 行Select 语 句 中 排 列 的 顺 序 号, 如 果 习惯 于 使 用 列 号 引
用 某 列, 要 注 意 可 能 在 后 来 会 在 数 据 窗口 的select 语 句 中 移 动
或 删 除 某 些 列, 如 果 不 能 想 起 所 有引 用 过 这 个 数 据 窗 口 的 代
码, 这 时 就 有 可 能 出 现 数 据 类型 不 匹 配 的 错 误。 使 用 列 名 来 引

用 则 可 以 避 免 这 类 错 误,但 是 这 里 使 用 的 字 符 串, 在 编 译 时P
owerBuilder 并 不 验 证 引用 得 是 否 正 确, 只 有 在 运 行 时, 系 统 才 可

能 发 现 使 用 的 字符 串 在 数 据 窗 口 中 不 存 在, 并 提 示 错 误, 退
出 应 用。 这 种错 误 一 般 比 较 难 以 发 现, 减 小 这 种 出 错 的 方 法 是

尽 可 能使 用Object Browses 来 剪 贴, 以 减 小 录 入 错 误。
   安 全 的 环 境 还 应 当 注 意 尽 可 能 避 免 用 户 无 意 录入 无 效 的
数 据。 在GUI 下, 有 许 多 控 件 可 以 以 十 分 友 好 的 方式 限 制 用 户 输

入 值 的 种 类。 例 如 一 个 多 选 框 只 有 两 种 值的 选 择, 所 以 当 用
户 作 出 选 择 的 可 能 性 只 有 两 个 时, 可 以采 用 这 一 控 件, 免 去 了

另 外 编 程 进 行 输 入 有 效 性 验 证 的麻 烦。 当 选 择 的 可 能 再 多 一
些 时, 可 以 采 用 单 选 钮, 每 一种 选 择 都 是 有 效 的, 用 户 不 可 能

输 入 任 何 一 种 无 效 的 选择。 同 理 采 用ListBox、DropDownDataWindow、D
ropDownListBox 等 标 准 控件 都 可 以 有 效 地 避 免 用 户 无 效 输 入, 而
不 必 另 外 编 程 来进 行 有 效 性 验 证, 同 时 可 避 免 用 户 在 某 一 个
输 入 点 反 复作 输 入 尝 试 而 耽 误 很 多 时 间。
   在 一 个 应 用 系 统 中, 开 发 者 应 当 避 免 用 户 作 出未 经 授 权 或

没 有 意 义 的 操 作, 在PowerBuilder 中 菜 单 和 按 钮等 对 象 有Enabled 和

Visible 的 属 性, 因 此 对 用 户 未 授 权 或 无 法进 行 的 操 作 应 将 相 应

对 象 的 属 性 改 为Disabled 和Invisible。 例如 在 一 个 窗 口 中 有 一 个
数 据 输 入 窗 口 和 一 个 删 除 按 钮。在 编 辑 一 条 新 记 录 时, 删 除 按

钮 是 无 效 的, 因 此, 这 个 按钮 的 属 性 应 为Disable。 当 窗 口 的 状
态 发 生 变 化 时, 应 当 随时 改 变 控 件 或 菜 单 项 的 这 两 个 属 性。
   当 对 象 无 效 时, 使 用 该 控 件 的Disable 属 性 还 是Invisible 属 性

是 个 人 习 惯 问 题。 一 般 地, 在 一 个 菜 单 项 或 控 件 永 远是 无 效
时 应 当 使 用Invisible 属 性, 例 如 一 个 用 户 打 开 一 个有 删 除 键 的
窗 口, 但 是 这 个 用 户 没 有 删 除 权 限, 那 么 这 个按 钮 就 应 当 是 不

可 见 的; 而 如 果 用 户 有 权 删 除, 只 是 在 当前 状 态 下, 无 法 执 行

删 除 功 能, 如 编 辑 新 记 录, 这 时 该 按钮 应 当 设 置 成Disable。
   数 据 窗 口 是 一 个 单 一 的 封 装 的 对 象, 当 不 希 望用 户 输 入 某

一 列 时, 不 能 将 整 个 数 据 窗 口 的 属 性 设 成Disable,而 是 应 当 采
用 其 它 的 方 法, 一 般 来 讲, 有 以 下 三 种 方 式:
将 该 列 的Tab Order 设 为0, 这 样 用 户 将 无 法 按tab 键 或 用 鼠标 聚 焦

在 该 列 上。 如 果 采 用 这 一 方 法, 应 当 将 其 原 有 的Tab Order 值 存
储 在 一 个 实 例 变 量 中, 以 便 在 需 要 时 恢 复。
将 列 的Display Only 或Protect 属 性 设 为 真。 这 两 个 属 性 设 为真 时,
可 以 使 该 列 得 以 聚 焦( 只 要tab order 不 为0), 用 户 还 可以 在 该 列
上 选 中 一 些 文 字 及 水 平、 垂 直 滚 屏, 只 是 这 一 列的 值 不 能 作 修

改。 如 果 数 据 库 中 的 某 列 大 篇 幅 的 多 行 文字 只 能 显 示 而 不 能
修 改 时, 可 以 采 用 这 一 方 法, 但 应 注 意该 列 的tab order 不 能 为0
, 这 样 保 留 用 户 在 必 要 时 对 其 中 的部 分 内 容 进 行 拷 贝 的 权 利


将 该 列 的Visible 属 性 设 为 假。 这 样 该 列 自 动 将tab order 设为0 而 无

法 聚 焦。 当 这 一 值 再 改 为 真 时,tab order 的 值 仍 能恢 复。 这 一 方

法 的 缺 点 是 在 改 变 属 性 时 屏 幕 会 出 现 闪 烁,因 此 这 一 方 法 不
能 滥 用。
   将 系 统 出 现 的 错 误 提 示 信 息 尽 可 能 淡 化 处 理 是使 得 用 户
有 安 全 感 的 重 要 因 素。 开 发 者 应 当 预 见 到 某 些可 能 出 现 的 错
误, 尽 可 能 避 免 系 统 缺 省 的 错 误 信 息 出 现,一 方 面 由 于 这 些 信

息 本 身 没 有 汉 化, 而 且 过 于 专 业 化, 用户 不 易 理 解, 另 一 方 面

也 容 易 使 用 户 以 为 自 己 操 作 错 误,造 成 不 安 全 感。 例 如 用 户
可 能 会 在 输 入 数 据 时 违 反 了 数据 库 的 约 束 条 件, 开 发 者 应 当
在PowerBuilder 发 出SQL 语 句 向数 据 库 提 交 前 对 此 进 行 必 要 的 有 效

性 检 验。 当 然 使 用 下拉 列 表 框 等 方 法 可 以 实 现 外 键 约 束。 如
果 用 户 直 接 从 键盘 输 入, 须 在 对 数 据 作update 之 前 先 验 证 其 有
效 性。 数 据 库中 有 些 列 有 非 空 的 约 束, 如 果 用 户 对 某 些 列 还 没

有 填 入值 时 就 提 交 数 据 库 会 也 返 回 错 误, 因 此 在 开 发 者 设 计
窗口 时, 应 对 数 据 库 的 非 空 约 束 等 条 件 先 作 一 预 览, 不 要 让从

DBMS 发 出 的 错 误 信 息 直 接 显 示 给 用 户。 另 外 在 使 用 数 据窗 口 前

, 应 确 保 每 一 列 都 在update 选 项 中 被 选 中( 在 数 据 窗口 画 笔 菜
单 的Rows|Update 中), 否 则 系 统 在DataWindow 做Update 和Insert 操 作 时,

将 不 包 括 该 列。
   PowerBuilder 中, 数 据 窗 口 画 笔 里 列 的Required Field 属 性 是 一
个 界 面 很 不 友 好 的 属 性。 一 旦 聚 焦 在 该 列 上, 没有 输 入 任 何 东

西 就 离 开 或 者 提 交 数 据 窗 口 时 该 列 没 有 值,系 统 都 不 允 许。
即 使 不 知 该 输 入 什 么, 想 查 询 一 下 其 他 窗口 时, 也 要 先 在 该 列

中 写 入 一 些 东 西, 才 能 关 团 这 个 窗 口,因 此 建 议 一 般 不 采 用
这 一 属 性, 而 是 要 通 过 编 程 来 做 检查, 可 以 把 这 段 代 码 放 在Up

dateStart 事 件 中, 这 一 事 件 在 执行update() 函 数 时 触 发。
   在 用 户 要 作 出 不 易 恢 复 的 操 作 前, 应 对 用 户 作适 当 的 提 示

, 这 样 在 用 户 打 算 探 索 系 统 新 功 能 时 没 有 后顾 之 忧。 例 如 用
户 不 经 意 下 删 除 一 些 记 录 要 恢 复 它 们 是困 难 的, 因 此 在 用 户
删 除 前, 出 一 个 提 示 窗 口“ 您 将 删 除下 列 记 录, 继 续 ?” 等。 在

系 统 修 改 了 记 录 却 没 有 存 盘 就退 出 之 前, 应 在CloseQuery 事 件 提

示“ 是 否 要 保 存” 等 信 息。
   在 应 用 程 序 设 计 的 全 过 程 中, 必 须 记 住 要 编 写安 全 的 应 用

这 一 重 要 因 素, 这 样 才 能 在 该 应 用 使 用 时 少产 生 错 误, 减 小
维 护 的 压 力, 这 些 注 意 事 项 有:
统 一 的 外 观;
引 用 对 象 前 的 有 效 性 检 验;
使 用 正 确 的 数 据 窗 口 列 名;
使 用 适 当 的GUI 控 件 来 使 得 用 户 输 入 有 效;
需 要 时 对 数 据 窗 口 的 列 作 保 护;
提 交 前 对 数 据 窗 口 列 作 约 束 检 验;
避 免 用 户 进 入 危 险 地 带;
对 用 户 不 经 意 的 操 作 作 出 提 示。
小 结
小 结
   《 宋 史》 载, 岳 飞 曾 言:“ 兵 法 之 常, 运 用 之 妙,存 乎 一 心”

。 我 们 在 这 两 期 讨 论 的 界 面 设 计 的 一 些 注 意 事项, 以 及 以 前
各 期 谈 到 的 其 他 一 些PowerBuilder 的 开 发 技 巧,并 不 是 万 能 的 和
一 成 不 变 的, 也 并 没 有 涵 盖 开 发 的 全 部内 容。 只 是 希 望 能 够 为

读 者 提 供 解 决 问 题 的 思 路, 使 读 者能 够 建 立 感 觉, 演 绎 出 同
适 合 于 应 用 的、 实 用 的 技 巧 来。
   本 讲 座 到 此 就 暂 告 一 段 落。 笔 者 在 历 时 一 年 的撰 文 过 程 中

, 曾 收 到 了 读 者 大 量 的 热 情 的 来 信(Email) 和电 话, 给 予 我 鼓
励 与 支 持, 对 文 章 中 的 错 误 给 予 批 评 与 指正, 这 些 都 成 为 了 我

坚 持 完 成 这 一 讲 座 的 最 根 本 的 动 力。遗 憾 的 是, 限 于 时 间 和
精 力, 对 于 这 些 来 信, 我 未 能 一 一回 复, 特 此 至 歉。 更 为 遗 憾
的 是, 限 于 版 面, 我 不 得 不 在讲 座 中 放 弃 了 一 些 虽 然 重 要、 却

需 要 较 大 篇 幅 才 能 说 清楚 的 专 题, 如 应 用 分 析 设 计、 团 队 开
发、 图 形 数 据 窗 口 设计、Debug 技 巧 等 等, 今 后 将 陆 续 为 大 家 补
上。
   最 后, 感 谢 原Sybase 公 司 市 场 部 总 监 檀 林 先 生 促成 了 这 一 讲

座 的 开 办, 感 谢《 计 算 机 世 界》 李 福 顺 主 任 和林 江 艳 小 姐 悉 心

地 安 排 和 对 文 章 精 益 求 精 地 修 改 和 校 正,感 谢 读 者 对 本 讲 座
的 关 注 和 支 持 !
--
我想自由自在地飞......
飞过大海...
飞过沙漠...
飞翔在星的夜空......
※ 来源:.逸仙时空 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)
页面执行时间:214.087毫秒