目 前,Visual FoxPro 在 数 据 库 应 用 系 统 的 开 发 中 得 到 了 广 泛 的 应 用, 系 统 的 开 发 技 巧 和 注 意 事 项 受 到 人 们 的 关 注, 本 文 叙 及 的 两 个 编 程 技 巧, 实 现 非 常 简 单, 但 在 实 际 应 用 中 起 到 了 很 好 的 作 用。
1 . 跟 变 式 组 合 框
在 实 际 应 用 系 统 中, 常 常 采 用 下 拉 列 表 框 实 现 字 符 字 段 数 据 的 规 范 化 输 入, 并 且 往 往 一 个 数 据 表 中 会 有 多 个 这 样 的 数 据 字 段, 而 对 应 这 些 字 段 的 规 范 化 数 据 则 作 为 枚 举 数 据 统 一 放 在 一 个 枚 举 数 据 表 里 进 行 管 理。 这 就 出 现 一 个 问 题, 对 应 不 同 字 段 的 枚 举 数 据 有 宽 有 窄, 为 了 存 下 所 有 这 些 数 据, 枚 举 数 据 表 的 数 据 字 段 要 足 够 的 宽, 但 对 于 目 标 数 据 库 的 控 制 字 段, 显 然 要 根 据 业 务 对 数 据 的 要 求 和 节 省 空 间 的 考 虑, 将 字 段 设 计 成 合 适 的 宽 度。 对VFP 来 说, 若 列 表 数 据 宽 度 超 出 控 制 字 段 宽 度, 则 文 本 框 不 能 显 示 选 定 数 据, 这 一 点 常 常 被 编 程 者 忽 视, 而 造 成 提 交 给 用 户 的 程 序 不 能 正 常 运 行。 其 实 只 要 在 设 计 下 拉 列 表 框 时 稍 加 几 行 代 码 就 能 解 决 这 个 问 题, 并 且 还 能 实 现 下 拉 列 表 框 和 文 本 框 自 动 跟 随 控 制 字 段 的 宽 度 发 生 变 化, 使 对 象 宽 度 始 终 与 字 段 宽 度 一 致。
假 设 控 制 数 据 表KZB.DBF 的 控 制 字 段 名 为A1, 实 际 应 用 系 统 中,A1 相 当 于 不 同 数 据 表 中 的 不 同 枚 举 字 段。 枚 举 表MJB.DBF 将 应 用 系 统 的 所 有 枚 举 数 据 集 中 管 理, 枚 举 表 最 少 包 括 两 个 字 段: 枚 举 数 据 和 枚 举 字 段 标 志, 这 里 的 枚 举 数 据 字 段 名 为CC, 枚 举 字 段 标 志 为MJBZ。 图1 为 控 制 表 字 段A1 宽 度 为10 的 情 况, 图2 为 控 制 表 字 段A1 宽 度 调 为26 的 情 况。 具 体 实 现 方 法 是: 先 在 表 单 的 数 据 环 境 中 添 加 控 制 表 和 枚 举 表, 在 组 合 框 的Init Event 方 法 中 加 入 如 下 代 码:
KD=LEN(KZB.A1)
THIS.WIDTH=31+6.3*KD
SELE MJB
CREAT CURSOR LS (CC C(KD))
APPE FROM MJB FOR MJBZ=" 测 试"
&&完成对应该字段的枚举数据筛选。
一 般 一 个 系 统 的 枚 举 字 段 的 枚 举 数 据 总 计 不 过 几 百, 在INIT 中 创 建 游 标 是 不 会 影 响 速 度 的。 在 设 计 列 表 时, 要 在 组 合 框 的RowSource 处 标 写 游 标 名LS, 这 种 功 能 的 实 现 只 需 加 写 很 少 的 代 码, 但 却 在 实 际 应 用 中 起 到 了 很 好 的 作 用。
2 . 椭 圆 图 形 菜 单
在 应 用 系 统 中, 常 用 大 按 钮 作 为 子 系 统 的 启 动 按 钮,VFP 中 的 按 钮 一 般 为 矩 形, 这 里 介 绍 一 种 制 作 椭 圆 图 形 钮 式 菜 单 的 方 法。
制 作 方 法: 先 在VFP 的 表 单 中 填 加 图 形 控 件SHAPE, 关 键 是 将SHAPE 的Curvature 属 性 值 设 为99, 这 将 使 控 件 形 状 由 矩 形 变 成 圆 或 椭 圆。 之 后, 将SHAPE 的BackStyler 设 置 为"0, 透 明",BorderWidth 属 性 设 置 为 合 适 的 宽 度, 如2~3, 使 放 在 其 底 部 的 图 形 能 很 好 的 与 其 吻 合, 椭 圆 图 形 的BorderColor 属 性 按 合 适 的 颜 色 进 行 设 置, 其 它 属 性 按 缺 省 值 设 置。 到 此, 我 们 设 计 好 了 透 明 的 椭 圆 图 形, 目 的 是 用 它 模 拟 一 个 按 钮, 实 现 点 击 椭 圆 内 部 发 生CLICK 事 件, 而 点 击 其 外 部 不 发 生CLICK 事 件。 下 一 步 是 要 在 椭 圆 图 形 的 下 面 放 置 一 个 合 适 的 图 片, 图 片 的 形 状 要 和 椭 圆 图 形 一 样, 同 样, 用 填 加 控 件 的 方 法 填 加 图 片 控 件Picture, 图 片 的BackStyler 设 置 为"0, 透 明", 再 设 置Picture 属 性 中 的 图 片 文 件 名。 调 整 图 片 的 位 置, 使 椭 圆 图 形 与 图 片 具 有 整 体 感。 为 了 模 拟 按 钮 的CLICK 动 作, 我 们 利 用 椭 圆 图 形 的MouseDown Event 方 法, 在 其 中 填 加 如 下 代 码:
LPARAMETERS nButton, nShift, nXCoord, nYCoord
H=THIS.LEFT+THIS.WIDTH/2
K=THIS.TOP+THIS.HEIGHT/2
A=THIS.WIDTH/2
B=THIS.HEIGHT/2
y1=k-b*SQRT(1-(nXCoord-h)^2/(a^2))
y2=k+b*SQRT(1-(nXCoord-h)^2/(a^2))
IF nYCoord > Y1.AND.nYCoord< Y2
THIS.PARENT.LABEL5.VISIBLE=.T.
&&点中椭圆内部
THIS.PARENT.LABEL6.VISIBLE=.F.
&&点中椭圆外部
*DO FORM SUBFORM1
&&下级表单
ELSE
THIS.PARENT.LABEL5.VISIBLE=.F.
THIS.PARENT.LABEL6.VISIBLE=.T.
ENDI
当 用 鼠 标 点 击 椭 圆 内 部 时, 表 单 底 部 显 示" 你 点 中 了 按 钮 内 部"; 点 击 椭 圆 外 部 时, 表 单 底 部 显 示" 你 点 中 了 按 钮 外 部"。 此 段 代 码 可 以 实 现 点 击 鼠 标 左 键 激 活 下 级 表 单 的 功 能, 为 保 证 表 单 操 作 的 可 靠, 最 好 将 主 表 单 的WindowType 属 性 设 为"1- 模 式"。
以 上 表 单 在 联 想P5/133 机 上 调 试 通 过。