明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

在VFP中完成跟變式組合框及橢圓圖形菜單

[摘要]目 前,Visual FoxPro 在 數(shù) 據(jù) 庫 應(yīng) 用 系 統(tǒng) 的 開 發(fā) 中 得 到 了 廣 泛 的 應(yīng) 用, 系 統(tǒng) 的 開 發(fā) 技 巧 和 注 意 事 項 受 到 人 們 的 關(guān) 注, 本 文 敘 及 的 兩 個 編 程 技 巧, 實 現(xiàn) 非 常 簡 單, 但 在 實 際 應(yīng) 用 中 起...
    目 前,Visual FoxPro 在 數(shù) 據(jù) 庫 應(yīng) 用 系 統(tǒng) 的 開 發(fā) 中 得 到 了 廣 泛 的 應(yīng) 用, 系 統(tǒng) 的 開 發(fā) 技 巧 和 注 意 事 項 受 到 人 們 的 關(guān) 注, 本 文 敘 及 的 兩 個 編 程 技 巧, 實 現(xiàn) 非 常 簡 單, 但 在 實 際 應(yīng) 用 中 起 到 了 很 好 的 作 用。

1 . 跟 變 式 組 合 框
    在 實 際 應(yīng) 用 系 統(tǒng) 中, 常 常 采 用 下 拉 列 表 框 實 現(xiàn) 字 符 字 段 數(shù) 據(jù) 的 規(guī) 范 化 輸 入, 并 且 往 往 一 個 數(shù) 據(jù) 表 中 會 有 多 個 這 樣 的 數(shù) 據(jù) 字 段, 而 對 應(yīng) 這 些 字 段 的 規(guī) 范 化 數(shù) 據(jù) 則 作 為 枚 舉 數(shù) 據(jù) 統(tǒng) 一 放 在 一 個 枚 舉 數(shù) 據(jù) 表 里 進 行 管 理。 這 就 出 現(xiàn) 一 個 問 題, 對 應(yīng) 不 同 字 段 的 枚 舉 數(shù) 據(jù) 有 寬 有 窄, 為 了 存 下 所 有 這 些 數(shù) 據(jù), 枚 舉 數(shù) 據(jù) 表 的 數(shù) 據(jù) 字 段 要 足 夠 的 寬, 但 對 于 目 標 數(shù) 據(jù) 庫 的 控 制 字 段, 顯 然 要 根 據(jù) 業(yè) 務(wù) 對 數(shù) 據(jù) 的 要 求 和 節(jié) 省 空 間 的 考 慮, 將 字 段 設(shè) 計 成 合 適 的 寬 度。 對VFP 來 說, 若 列 表 數(shù) 據(jù) 寬 度 超 出 控 制 字 段 寬 度, 則 文 本 框 不 能 顯 示 選 定 數(shù) 據(jù), 這 一 點 常 常 被 編 程 者 忽 視, 而 造 成 提 交 給 用 戶 的 程 序 不 能 正 常 運 行。 其 實 只 要 在 設(shè) 計 下 拉 列 表 框 時 稍 加 幾 行 代 碼 就 能 解 決 這 個 問 題, 并 且 還 能 實 現(xiàn) 下 拉 列 表 框 和 文 本 框 自 動 跟 隨 控 制 字 段 的 寬 度 發(fā) 生 變 化, 使 對 象 寬 度 始 終 與 字 段 寬 度 一 致。
    假 設(shè) 控 制 數(shù) 據(jù) 表KZB.DBF 的 控 制 字 段 名 為A1, 實 際 應(yīng) 用 系 統(tǒng) 中,A1 相 當 于 不 同 數(shù) 據(jù) 表 中 的 不 同 枚 舉 字 段。 枚 舉 表MJB.DBF 將 應(yīng) 用 系 統(tǒng) 的 所 有 枚 舉 數(shù) 據(jù) 集 中 管 理, 枚 舉 表 最 少 包 括 兩 個 字 段: 枚 舉 數(shù) 據(jù) 和 枚 舉 字 段 標 志, 這 里 的 枚 舉 數(shù) 據(jù) 字 段 名 為CC, 枚 舉 字 段 標 志 為MJBZ。 圖1 為 控 制 表 字 段A1 寬 度 為10 的 情 況, 圖2 為 控 制 表 字 段A1 寬 度 調(diào) 為26 的 情 況。 具 體 實 現(xiàn) 方 法 是: 先 在 表 單 的 數(shù) 據(jù) 環(huán) 境 中 添 加 控 制 表 和 枚 舉 表, 在 組 合 框 的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=" 測 試"
&&完成對應(yīng)該字段的枚舉數(shù)據(jù)篩選。
    一 般 一 個 系 統(tǒng) 的 枚 舉 字 段 的 枚 舉 數(shù) 據(jù) 總 計 不 過 幾 百, 在INIT 中 創(chuàng) 建 游 標 是 不 會 影 響 速 度 的。 在 設(shè) 計 列 表 時, 要 在 組 合 框 的RowSource 處 標 寫 游 標 名LS, 這 種 功 能 的 實 現(xiàn) 只 需 加 寫 很 少 的 代 碼, 但 卻 在 實 際 應(yīng) 用 中 起 到 了 很 好 的 作 用。
2 . 橢 圓 圖 形 菜 單
    在 應(yīng) 用 系 統(tǒng) 中, 常 用 大 按 鈕 作 為 子 系 統(tǒng) 的 啟 動 按 鈕,VFP 中 的 按 鈕 一 般 為 矩 形, 這 里 介 紹 一 種 制 作 橢 圓 圖 形 鈕 式 菜 單 的 方 法。
    制 作 方 法: 先 在VFP 的 表 單 中 填 加 圖 形 控 件SHAPE, 關(guān) 鍵 是 將SHAPE 的Curvature 屬 性 值 設(shè) 為99, 這 將 使 控 件 形 狀 由 矩 形 變 成 圓 或 橢 圓。 之 后, 將SHAPE 的BackStyler 設(shè) 置 為"0, 透 明",BorderWidth 屬 性 設(shè) 置 為 合 適 的 寬 度, 如2~3, 使 放 在 其 底 部 的 圖 形 能 很 好 的 與 其 吻 合, 橢 圓 圖 形 的BorderColor 屬 性 按 合 適 的 顏 色 進 行 設(shè) 置, 其 它 屬 性 按 缺 省 值 設(shè) 置。 到 此, 我 們 設(shè) 計 好 了 透 明 的 橢 圓 圖 形, 目 的 是 用 它 模 擬 一 個 按 鈕, 實 現(xiàn) 點 擊 橢 圓 內(nèi) 部 發(fā) 生CLICK 事 件, 而 點 擊 其 外 部 不 發(fā) 生CLICK 事 件。 下 一 步 是 要 在 橢 圓 圖 形 的 下 面 放 置 一 個 合 適 的 圖 片, 圖 片 的 形 狀 要 和 橢 圓 圖 形 一 樣, 同 樣, 用 填 加 控 件 的 方 法 填 加 圖 片 控 件Picture, 圖 片 的BackStyler 設(shè) 置 為"0, 透 明", 再 設(shè) 置Picture 屬 性 中 的 圖 片 文 件 名。 調(diào) 整 圖 片 的 位 置, 使 橢 圓 圖 形 與 圖 片 具 有 整 體 感。 為 了 模 擬 按 鈕 的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.
&&點中橢圓內(nèi)部
    THIS.PARENT.LABEL6.VISIBLE=.F.
&&點中橢圓外部
        *DO FORM SUBFORM1
&&下級表單
ELSE
    THIS.PARENT.LABEL5.VISIBLE=.F.
        THIS.PARENT.LABEL6.VISIBLE=.T.
ENDI
    當 用 鼠 標 點 擊 橢 圓 內(nèi) 部 時, 表 單 底 部 顯 示" 你 點 中 了 按 鈕 內(nèi) 部"; 點 擊 橢 圓 外 部 時, 表 單 底 部 顯 示" 你 點 中 了 按 鈕 外 部"。 此 段 代 碼 可 以 實 現(xiàn) 點 擊 鼠 標 左 鍵 激 活 下 級 表 單 的 功 能, 為 保 證 表 單 操 作 的 可 靠, 最 好 將 主 表 單 的WindowType 屬 性 設(shè) 為"1- 模 式"。
    以 上 表 單 在 聯(lián) 想P5/133 機 上 調(diào) 試 通 過。