Database 版 (精华区)

发信人: starstar (星语心愿), 信区: Database
标  题: 在VFP中实现跟变式组合框及椭圆图形菜单 
发信站: 哈工大紫丁香 (2001年05月19日20:27:18 星期六), 站内信件

目 前,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.239.32]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.756毫秒