如何使用Delphi开发大型主从架构系统-Package的秘密和威力.DOC

上传人:国*** 文档编号:858068 上传时间:2018-11-03 格式:DOC 页数:20 大小:484KB
下载 相关 举报
如何使用Delphi开发大型主从架构系统-Package的秘密和威力.DOC_第1页
第1页 / 共20页
如何使用Delphi开发大型主从架构系统-Package的秘密和威力.DOC_第2页
第2页 / 共20页
如何使用Delphi开发大型主从架构系统-Package的秘密和威力.DOC_第3页
第3页 / 共20页
如何使用Delphi开发大型主从架构系统-Package的秘密和威力.DOC_第4页
第4页 / 共20页
如何使用Delphi开发大型主从架构系统-Package的秘密和威力.DOC_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、如 何 使 用 Delphi 開 發 大 型 主 從 架 構 系 統 - Package 的 秘 密 和 威 力相 信 許 多 人 和 我 一 樣 , 在 使 用 Delphi 開 發 應 用 系 統 的 時 候 , 一 定 會 想 到 如 何 的 切 割 整 個 應 用 系 統 。 是 把 所 有 的 子 系 統 撰 寫 成 一 個 很 大 ( 可 能 會 有 數 M .Bytes 的 大 小 ) 的 EXE 檔 呢 ? 還 是 應 該 把 每 一 個 模 組 撰 寫 在 不 同 的 EXE 檔 案 之 中 的 好 。事 實 上 這 兩 種 方 法 都 有 它 們 自 己 的 問 題 。 如

2、 果 是 把 所 有 的 模 組 撰 寫 在 一 個 EXE 檔 案 之 中 的 話 , 那 麼 不 但 執 行 檔 太 大 , 不 易 更 新 和 維 護 。 在 開 發 時 也 不 甚 方 便 , 因 為 要 讓 數 個 人 撰 寫 同 一 支 應 用 程 式 的 確 比 較 麻 煩 。 那 麼 如 果 我 們 把 每 一 個 模 組 讓 不 同 的 程 式 師 撰 寫 成 獨 立 的 EXE 檔 案 , 再 由 一 個 主 程 式 分 別 啟 動 不 同 的 EXE 檔 不 就 好 了 嗎 ? 沒 錯 這 是 許 多 人 使 用 的 方 法 ( 包 括 我 在 內 ) , 但 是 這 樣

3、 切 割 應 用 系 統 有 一 個 問 題 , 那 就 是 如 果 每 一 個 獨 立 的 EXE 模 組 , 都 需 要 使 用 資 料 庫 的 話 , 那 麼 當 主 程 式 啟 動 個 別 的 EXE 檔 案 時 , 每 一 個 EXE 都 必 須 重 新 再 連 結 到 資 料 庫 , 開 啟 資 料 庫 表 格 , 再 取 得 它 需 要 的 資 料 。 這 個 過 程 通 常 都 需 要 不 少 的 時 間 。 例 如 連 結 到 Oracle 並 且 開 啟 一 個 資 料 庫 表 格 的 話 , 通 常 需 要 五 到 十 秒 。 如 果 EXE 開 啟 的 資 料 庫 表

4、格 或 是 查 詢 比 較 多 的 話 , 那 麼 主 程 式 在 啟 動 獨 立 的 EXE 檔 案 時 , 通 常 需 要 3 0 幾 秒 到 一 分 鐘 不 等 。 這 對 於 許 多 的 使 用 者 而 言 是 非 常 不 方 便 的 。 這 樣 的 狀 狀 甚 至 會 造 成 你 的 專 案 無 法 交 貨 ( 例 如 使 用 者 要 求 在 五 秒 之 內 EXE 程 式 的 畫 面 必 須 出 現 ) 。 除 此 之 外 , 每 一 個 獨 立 的 EXE 又 使 用 了 額 外 的 連 結 以 便 存 取 資 料 庫 , 造 成 了 資 源 的 浪 費 。 面 對 這 種 二

5、難 的 局 面 , 你 現 在 的 選 擇 是 什 麼 呢 ?事 實 上 這 個 問 題 在 我 的 心 中 也 盤 旋 了 許 久 。 因 為 這 一 是 我 想 要 解 決 的 問 題 , 只 是 由 於 工 作 的 繁 忙 讓 我 一 直 無 法 花 時 間 解 決 它 。 最 近 在 手 上 的 事 情 告 一 段 落 之 後 , 又 接 到 許 多 朋 友 的 詢 問 , 所 以 決 定 花 一 些 時 間 試 著 解 決 這 個 重 要 的 問 題 。增 加 應 用 程 式 載 入 的 效 率如 果 我 們 仔 細 的 思 考 這 個 問 題 的 話 , 就 可 以 發 現 問 題

6、 出 在 每 一 支 獨 立 的 EXE 都 需 要 重 複 的 連 結 資 料 庫 所 至 。 所 以 如 果 我 們 可 以 讓 連 結 到 資 料 庫 的 次 數 減 少 的 話 , 不 就 可 以 加 快 應 用 程 式 載 入 的 效 率 了 嗎 ?這 個 想 法 當 然 很 簡 單 , 但 是 問 題 是 要 如 何 的 減 少 應 用 程 式 連 結 資 料 庫 的 次 數 呢 ? 事 實 上 這 個 想 法 也 很 簡 單 , 最 好 是 讓 應 用 系 統 連 結 資 料 庫 的 次 數 變 成 一 次 , 如 此 一 來 除 了 主 程 式 需 要 連 結 資 料 庫 之

7、外 , 其 他 的 應 用 模 組 都 能 夠 公 同 使 用 由 主 程 式 載 入 的 資 料 模 組 的 話 , 那 麼 一 切 問 題 不 都 解 決 了 嗎 ? 請 注 意 , 在 這 裡 我 所 說 的 其 他 模 組 代 表 獨 立 的 EXE 或 是 其 他 形 式 的 應 用 程 式 , 而 不 是 指 在 單 一 一 個 EXE 之 中 不 同 的 表 格 或 是 子 系 統 。我 們 可 以 使 用 圖 一 來 表 示 這 個 想 法 。 在 這 個 構 想 中 , 我 希 望 由 應 用 主 程 式 先 負 責 載 入 公 用 的 資 料 模 組 。 在 這 個 資 料

8、 模 組 之 中 有 其 他 子 系 統 需 要 使 用 各 個 資 料 庫 表 格 , 如 此 一 來 當 主 程 式 啟 動 其 他 的 子 系 統 時 , 就 不 需 要 再 讓 每 一 個 子 系 統 再 連 結 , 開 啟 資 料 庫 表 格 了 。圖一 公 用 資 料 模 組 示 意 圖當 這 樣 還 有 一 些 設 計 上 的 問 題 , 我 們 稍 後 再 回 來 討 論 這 個 問 題 , 現 在 先 我 們 看 看 如 何 的 把 這 個 構 想 實 做 出 來 , 並 且 測 試 一 下 實 際 的 結 果 是 不 是 真 的 比 較 有 效 率 。要 實 做 這 個 構

9、 想 , 我 們 必 須 想 辦 法 讓 公 用 的 資 料 模 組 能 夠 讓 每 一 個 子 系 統 存 取 到 , 並 且 不 再 需 要 每 一 個 子 系 統 都 分 別 的 和 資 料 庫 建 立 一 個 連 結 的 Session。 我 的 第 一 個 想 法 是 使 用 DLL 來 解 決 這 個 問 題 。 但 是 事 實 上 使 用 DLL 無 法 解 決 這 個 問 題 。 在 我 花 費 了 許 多 的 時 間 之 後 , 使 用 DLL 仍 然 有 會 有 Access Violation 的 錯 誤 。 我 也 曾 在 網 路 上 搜 尋 相 關 的 問 題 或 是

10、 資 料 , 我 在 寶 蘭 的 Discuss Forum 中 也 看 到 有 人 提 出 類 似 的 問 題 , 但 是 似 乎 都 沒 有 人 確 實 的 回 答 這 個 問 題 。 我 也 想 過 乾 脆 拿 出 我 的 Soft-Ice 和 Bounds-Checker 看 看 為 什 麼 使 用 DLL Assembly 打 交 道 , 這 實 在 不 是 件 好 玩 的 事 情 。 正 打 算 放 棄 之 時 , 突 然 想 到 Delphi 3.0 之 中 的 Package 不 正 是 解 決 這 個 問 題 的 好 方 法 嗎 ? 於 是 我 就 決 定 試 試 看 , 果

11、 然 一 擊 中 地 , 順 利 的 解 決 了 這 個 問 題 。 當 然 , 要 知 道 為 什 麼 使 用 Package 可 以 解 決 這 個 問 題, 你 需 要 知 道 Package 和 DLL 的 異 同 。DLL 和 Package為 什 麼 在 我 一 開 始 使 用 DLL 時 無 法 解 決 多 個 模 組 共 用 一 個 資 料 模 組 DLL 的 問 題 呢 ? 這 主 要 是 因 為 在 Win 95/NT 中 當 每 一 個 模 組 載 入 DLL 時 , 對 於 每 一 個 DLL 之 中 的 全 域 變 數 而 言 , 每 一 個 模 組 都 會 有 一

12、份 獨 立 的 變 數 。 這 是 什 麼 意 思 呢 ? 我 們 可 以 使 用 圖 二 來 說 明 。圖 二 Win 95/NT 中 全 域 變 數 和 模 組 的 關 係當 圖 二 中 的 模 組 一 和 模 組 二 分 別 的 載 入 它 們 共 用 的 DLL 時 , 雖 然 在 這 個 共 用 的 DLL 中 有 一 個 全 域 變 數 gAccount 。 但 是 模 組 一 和 模 型 二 會 分 別 的 擁 有 一 個 gAccount 變 數 。 這 也 就 是 說 模 組 一 對 於 gAccount 變 數 數 值 所 做 的 修 改 並 不 會 影 響 模 組 二 中

13、 的 gAccount 變 數 數 值 。 在 Wn 95/NT 中 的 DLL 行 為 是 和 Win 3.x 不 同 的 , 因 為 在 Win 3.x 中 所 有 的 模 組 都 使 是 共 用 一 份 DLL 中 的 全 域 變 數 。由 於 Win 95/NT 中 DLL 全 域 變 數 的 這 種 特 性 , 所 以 當你 想 把 資 料 模 組 撰 寫 在 DLL 之 中 讓 多 個 模 組 共 同使 用 時 , 問 題 就 來 了 。 因 為 在 這 種 情 形 下 , 每 一 個 模 組 都 會 有 一 份 它 自 己 的 資 料 模 組 。 所 以 當 每一 個 應 用 程

14、 式 模 組 載 入 資 料 模 組 的 DLL 時 , 它 仍 然 會 連 結 資 料 庫 一 次 , 所 以 你 並 無 法 減 少 連 結資 料 庫 的 次 數 。那 麼 使 用 Package 有 什 麼 不 同 嗎 ? 在 回 答 這 個 問 題 之 前 , 請 你 先 回 想 一 下 。 在 Delphi 3.x 中 它 允 許 你 使 用 Package 的 功 能 來 編 譯 你 的 應 用 程 式 , 如 圖 三 所 示 。圖 三 Delphi 3.x 允 許 你 使 用 Package 的 功 能 編 譯 應 用 程式使 用 Package 編 譯 應 用 程 式 的 好

15、處 除 了 可 以 減 少 應 用 程 式 的 大 小 之 外 , 事 實 上 Package 還 有 一 個 很 重 要 的 特 性 , 那 就 是 Package 允 許 多 個 模 組 共 用 所 有 的 全 域 變 數 。我 們 可 以 使 用 圖 四 來 說 明 Package 的 特 性 。 請 你 想 一 想 , 當 你 的 應 用 程 式 使 用 Package 的 功 能 時 ,事 實 上 它 必 須 載 入 許 多 不 同 的 Packages 。 不 管 你 的 應 用 程 式 是 否 使 用 了 全 域 變 數 Application , 許 多 的 Packages

16、都 會 使 用 Application 這 個 全 域 變 數 。 由 於 全 域 變 數 Application 是 存 在 於 VCL.DPL 之 中 , 所 以 如 果 Application 會 對 於 每 一 個 載 入 它 的 模 組 都 產 生 一 份 獨 立 的 全 域 變 數 的 話 , 那 麼 整 個 應 用 程 式 便 會 產 生 不 正 確 的 結 果 。 所 以 由 這 個 說 明 我 們 可 以 知 道 , 在 圖 四 中 的 Application 和 Screen 等 全 域 變 數 對 於 所 有 使 用 它 的 模 組 而 言 一 定 是 只 有 一 份 全

17、 域 變 數 。圖 四 Package 中 全 域 變 數 的 特 性事 實 上 在 Forms.PAS 之 中 的 程 式 碼 也 透 露 著 這 些 蛛 絲 馬 跡 。 例 如 下 面 便 是 Forms.PAS 宣 告 Application 和 Screen 這 二 個 變 數 的 程 式 碼 。 從 它 們 的 注 釋 中 我們 可 以 清 楚 的 看 到 , 它 們 是 全 域 物 件 , 即 使 是 編 譯 成 Package 時 也 是 一 樣 。 Global objects varApplication: TApplicationScreen: TScreenCtl3DBt

18、nWndProc: Pointer = nil;由 於 Package 能 夠 自 動 的 將 其 中 的 全 域 變 數 編 譯 成 所 有 使 用 它 的 模 組 都 共 用 一 份 的 特 性 。 所 以 我 們 就 可 以 使 用 這 個 特 性 重 新 的 建 構 圖 一 的 架 構 成 為 圖 五 的 形 式 。圖 五 改 良 過 的 公 用 資 料 模 組 示 意 圖在 圖 五 中 我 們 可 以 把 所 有 模 組 需 要 共 同 使 用 的 資 料 模 組 撰 寫 在 一 個 Package 之 中 , 然 後 再 把 每 一 個 子 系 統 撰 寫 成 獨 立 的 Pack

19、age 。 只 有 主 程 式 是 EXE , 它 負 責 載 入 共 用 的 資 料 模 組 , 以 及 在 使 用 者 啟 動 每 一 個 子 系 統 時 再 載 入 相 對 應 的 子 系 統 Package 。使 用 這 種 架 構 有 許 多 的 好 處 。 第 一 個 便 是 共 用 的 資 料 模 組 只 需 要 載 入 一 次 即 可 。 而 這 個 好 處 便 是 我 們 前 面 討 論 需 要 解 決 的 問 題 。 如 此 一來 在 每 一個 子 系 統 載 入 時 便 可 以 加 快 其 執 行 的 速 度 。 第 二 個 好 處 是 在 開 發 這 整 個 系 統 時

20、 , 我 們 仍 然 可 以 讓不 同 的 程 式 師 負 責 發 展 不 同 的 子 系 統 , 這 樣 可 以 就 可 以 解 決 前 面 討 論 的 分 工 的 問 題 。 此 外 如 果 一 個 子系 統 很 龐 大 的 話 , 你 也 可 以 再 次 的 切 割 這 個 子 系 統 成 為 更 多 的 小 系 統 。 例 如 你 可 以 再 把 圖 五中 的 會 計 子 系 統 Package 再 分 為 一 般 會 計 , 成 本 會 計 , 和 管 理 會 計 等 不 同 的 Package 。 第 三 個 好 處 是 使 用 Package 就 像 是 使 用 DLL 一 樣

21、, 主 程 式 可 以 在 需 要 的 時 候 才 載 入 一 個 Package , 在 使 用 完 畢 之 後 可 以立 刻 的 釋 放 這 個 Package , 這 樣 可 以 讓 你 對 於 系 統 資 源 有 更 好 的 控 制 能 力 。 最 後 一 個 好 處 是 使 用 Package 可 以 讓 你 發 展 出 Plug-and-Play 的 模 組 , 當 然 這 需 要 藉 由 結 合 虛 擬 介 面 或 是 虛 擬 類 別 的 功 能 。 藉 由 使 用 Package 和 虛 擬 介 面 的 能 力 , 你 可 以 任 意 的 替 換 應 用 系 統 之 中 的 模

22、 組 而 不 會 影 響 系 統 的 執 行 。 這 個 功 能 對 於 許 多 使 用 Delphi 開 發 套 裝 軟 體 的 程 式 師 來 說 是 一 個 非 常 重 要 的 功 能 。現 在 你 應 該 對 於 DLL 和 Package 的 差 異 有 了 基 本 的 瞭 解 , 現 在 是 讓 我 們 看 看 如 何 使 用 Package 的 特 性 解 決 我 們 面 對 的 問 題 的 時 候 了 。 下 一 小 節 就 讓 我們 實 際 的 撰 寫 一 個 範 例 來 證 明 Package 對 於 全 域 變 數 的 處 理 方 式 以 及 使 用 Package 的

23、確 能 夠 加 快 應 用 程 式 的 載 入 速 度 。實 際 的 範 例由 於 平 日 我 大 部 份 的 時 間 都 是 使 用 Oracle , MS SQL Server 和 InterBase (許 多 的 讀 者 都 詢 問 我 為 什 麼 不 使 用 Sybase 或 是 Informix 做 為 範 例 說 明 , 這 實 在 是 因 為 我 比 較 少 使 用 它 們 , 並 沒 有 其 他 的 意 思 , 所 以 請使 用 Sybase ,Informix 和 DB2 的 讀 者 見 諒 。 不 過 我 相 信 我 們 討 論 的 東 西 都 可 以 使 用 在 這 些

24、資 料 庫 之 上) 。 在 這 三 個 資 料 庫 中 , Oracle 的 連 結 速 度 一 直 都是 令 我 非 常 頭 大 的 , 因 為 在 這 三 者 之 中 ,Orcale 連 結 資 料 庫 和 開 啟 資 料 庫 表 格 的 時 間 最 久 。 所 以 本 節 的 範 例 就 以 Oracle 資 料 庫 為 範 例 , 看 看 使 用 了 Package 之 後 會 不 會 有 任 何 明 顯 的 改 善 。首 先 請 你 先 建 立 一 個 Package , 並 且 在 這 個 Package 之 中 產 生 一 個 資 料 模 組 , 並 且 使 用 Databas

25、e 和 Query 元 件 連 結 到 Oracle 的 資 料 庫 如 圖 六 所 示 。圖 六 存 在 於 Package 之 中 的 資 料模 組 使 用 Database 連 結到 Oracle在 成 功 的 編 譯 了 這 個 Package 之 後 , 再 讓 我 們 設 計 範 例 程 式 的 主 表 格 如 圖 七 一 樣 。圖 七 使 用 公 用 資 料 模 組 的 主 表 格在 主 表 格 中 有 一 個 DataSource 元 件 。 這 個 DataSource 元件 會 在 資 料 模 組 的 Package 載 入 之 後 , 連 結 到 資料 模 組 之 中 的

26、 Query 元 件 以 便 顯 示 Oracle 資 料 庫 之 中的 資 料 。 現 在 剩 下 的 工 作 便 是 撰 寫 程 式 碼 載 入 資 料 模 組 Package 和 顯 示 資 料 庫 的 資 料 。首 先 在 主 表 格 啟 動 時 , 它 必 須 在 FormActivate 事 件 處 理 函 數 中 載 入 資 料 模 組 Package 。 它 呼 叫 LoaddbPackage 這 個 程 序 。procedure TMainForm.FormActivate(Sender: TObject); beginLoaddbPackage;end;LoaddbPack

27、age 是 真 正 負 責 載 入 Package 的 程 序 。 它 在 一 個 try except 程 式 區 塊 中 呼 叫 Delphi 的 LoadPackge 函 數 載 入 指 定 名 稱 的 Package 。 這 個 函 數 在 成 功 執 行 後 會 回 傳 一 個 Package 的 handle 值 。 我 們 的 程 式 必 須 儲 存 這 個 handle 值 以 便 稍 後 使 用 它 , 並 且 在 最 後 藉 由 這 個 handle 值 釋 放 載 入 的 Package 。 如 果 呼 叫 LoadPackage 成 功 的 話 , 程 式 就 呼 叫

28、LoadDataModule 從 Package 中 取 得 前 面 介 紹 的 資 料 模 組 , 否 則 在 except 程 式 區 塊 中 ShowMessage 會 顯 示 發 生 錯 誤 的 原 因 。procedure TMainForm.LoaddbPackage;begin /我們必須載入資料庫 Package 以便連結到資料庫tryaDBConnect := LoadPackage(DBPackages);LoadDataModule;excepton E : Exception dobeginMessageBeep(Word(-1);ShowMessage(E.Messa

29、ge);Application.Terminate;end;end;end;在 LoadDataModule 中 我 們 必 須 先 從 資 料 模 組 Package 之 中 取 得 資 料 模 組 的 真 正 Meta-Class 名 稱 , 然 後 使 用 這 個 Meta-Class 建 立 真 正 的 資 料 模 組 物 件 。 所 以 LoadDataModule 一 開 始 會 呼 叫 GetClass 向 Windows 取 得 特 定 類 別 名 稱 的 Meta-Class 。 而 GetClass 傳 入 的 參 數 TConcreteDataModule , 便 是 前

30、 面 我 們 建 立 的 資 料 模 組 的 真 正 的 類 別 名 稱 。由 於 一 個 獨 立 的 EXE 要 能 夠 取 得 Package 之 中 的 Meta-Class 必 須 使 用 指 定 的 類 別 名 稱 。 所 以當 你 在 Package 中 撰 寫 任 何 的 類 別 時 , 你 必 須 確 定 這 個 類 別 名 稱 在 所 有 Delphi 或 是 應 用 程 式 載 入 的 Package 中 都 是 唯 一 的 。 否 則 如 果 有 在 所 有 載 入 的 Pakcage 中 有 相 同 的 類 別 名 稱 時 ,Delphi 或 是 應 用 程 式 會 產

31、 生 一 個 例 外 。在 成 功 的 從 Package 取 得 了 Meta-Class 之 後 , 你 就 必 須 使 用 這 個 Meta-Class 產 生 真 正 的 資 料 模 組 物 件 。 請 注 意 在 下 面 的 程 式 碼 中 , 我 們 使 用 了 強 制 型 態 轉 換 把 TComponentClass 的 物 件 轉 換 為 TDataModule 的 物 件 。在 建 立 了 TDataModule 物 件 之 後 , 我 們 就 可 以 一 一 的 搜 尋 資 料 模 組 之 中 的 元 件 並 且 找 到 我 們 需 要 的 Query 元 件 , 並 且

32、 把 主 表 格 中 DataSource 的 DataSet 特 性 值 設 定 為 找 到 的 Query 元 件 。procedure TMainForm.LoadDataModule;var iCounter : Integer;begin Note that TApplication “owns“ this form and thus it must be freed priorto unloading the package dataModuleClass := GetClass(TConcreteDataModule);if dataModuleClass nil thenbeg

33、inadmGlobal :=TDataModule(TComponentClass(dataModuleClass).Create(Application);for iCounter := 0 to admGlobal.ComponentCount - 1 dobeginif UpperCase(admGlobal.ComponentsiCounter.ClassName) = TQUERY thenbeginaQuery := TQuery(admGlobal.ComponentsiCounter);DataSource1.DataSet := aQuery;break;end;end;en

34、d;end;由 於 在 上 面 的 程 式 碼 中 我 們 使 用 了 GetClass 以 取 得 特 定 名 稱 的 Meta-Class , 所 以 你 的 資 料 模 組 Package 必 須 在 它 的 initialization 程 式 區 塊 中 先 註 冊 它 自 己 。 下 面 的 程 式 碼 便 是 資 料 模 組 Package 註 冊 的 程 式 碼 。initializationRegisterClass(TConcreteDataModule)現 在 就 可 以 執 行 範 例 程 式 了 , 在 主 程 式 執 行 之後 , 你 可 以 看 到 類 似 圖 八

35、 的 畫 面 。 從 主 表 格 中 我 們 可 以 證 明 的 確 可 以 藉 由 資 料 模 組 Package 存 取 到 Oracle 的 資 料 。圖 八 主 表 格執 行 的 畫 面 , 它 果 然可 以 藉 由 資 料 模 組 Package 存 取 資 料到 這 裡 為 止 我 們 只 是 證 明 了 使 用 資 料 模 組 Package 可 以 讓 應 用 程 式正 確 的 執 行 , 但 是 主 程式 啟 動 的 時 間 和 一 般 獨 立 的 EXE 沒 有 什 麼 不 同 。 但 是 接 下 來 的 情 形 就 比 較 有 趣 了 。 因 為 我 們 要 藉 由 接

36、下 來 的 程 式 碼 來 證 明 使 用 Package 可 以 大 幅 加 快 子 系 統 的 載 入 速 度 。在 主 表 格 中 有 一 個 按 鈕 載 入 第 二 個 UI Package 。 這 個 按 鈕 的 功 能 就 是 模 擬 載 入 子 系 統 的 功 能 。 當 使 用 者 點 選 這 個 按 鈕 之 後 , 範 例 程 式 會 載 入 另 外 一 個 只 有 使 用 者 介 面 的 Package , 而 且 這 個 Package 必 須 再 使 用 剛 才 載 入 的 資 料 模 組 Package 來 顯 示 資 料 。 藉 由 這 個 模 擬 的 子 系 統 功 能 , 我 們 要 證 明 資 料 模 組 Package 可 以 在 不 同 的 模 組 中 共 用 而 且 可 以 加 快 模 組 啟 動 的 時 間 。這 個 按 鈕 的 OnClick 事 件 處 理 函 數 和 主 表 格 的 FormActvate 事 件 處 理 函 數 非 常 的 類 似 , 它 也 是 呼 叫 LoadUIPackage 程 序 以 便 載 入 一 個 使 用 者 介 面 Package 。procedure TMainForm.Button1Click(Sender: TObject);begin

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。