Database 版 (精华区)

发信人: mengy (往事如风), 信区: Database
标  题: 在VFP中实现跟变式组合框及椭圆图形菜单
发信站: 哈工大紫丁香 (2000年12月06日19:41:43 星期三), 转信

  在VFP中实现跟变式组合框及椭圆图形菜单

石 家 庄 邮 政 高 等 专 科 学 校
蔡 文 水

            目 前,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 机 上 调 试 通 过。


--

       大海无边天做岸
               山登绝顶我为风

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