19.1.3 建立部件過程概略
簡而言之,建立自定義部件的過程包含下列幾步:
● 建立包含新部件的庫單元
● 從已有部件類型中繼承得到新的部件類型
● 增加屬性、方法和事件
● 用Delphi注冊部件
● 為部件的屬性方法和事件建立Help文件
如果完成這些工作,完整的部件包含下列4個文件
● 編譯的庫單元 ( .DCU文件)
● 選擇板位圖 (.DCR文件)
● Help文件 (.HLP文件)
● Help-keyword文件 (.KWF文件)
19.2 Delphi部件編程方法
19.2.1 Delphi部件編程概述
19.2.1.1 Delphi可視部件類庫
Delphi的部件都是可視部件類庫(VCL)的對象繼承樹的一部分,下面列出組成VCL的對象的關(guān)系。TComponent是VCL中每一個部件的共同祖先。TComponent提供了Delphi部件正常工作的最基本的屬性和事件。庫中的各條分支提供了其它的更專一的功能。
當(dāng)建立部件時,通過從對象樹中已有的對象繼承獲得新對象,并將其加入VCL中。
19.2.1.2 建立部件的起點
部件是你在設(shè)計時想操作的任意程序元素。建立新部件意味著從已有類型中繼承得到新的部件對象類。
建立新部件的主要途徑如下:
● 修改已有的控制
● 建立原始控制
● 建立圖形控制
● 建立Windows控制的子類
● 建立非可視部件
下表列出了不同建立途徑的起始類
表19.1 定義部件的起始點
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
途 徑 起 始 類
─────────────────────────────
修改已有部件 任何已有部件,如TButton、TListBox
或抽象部件對象如TCustomListBox
建立原始控制 TCustomControl
建立圖形控制 TGraphicControl
建立窗口控制的子類 TWinControl
建立非可視部件 TComponent
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
也可以繼承非部件的其它對象,但無法在窗體設(shè)計窗口中操作它們。Delphi包括許多這種對象,如TINIFile、TFont等。
1. 修改已有控制
建立部件的最簡單的方法是繼承一個已有的、可用的部件并定制它?梢詮腄elphi提供的任何部件中繼承。例如,可以改變標(biāo)準(zhǔn)控制的缺省屬性值,如TButton。
有些控制,如Listbox和Grid等有許多相同變量,在這種情況下,Delphi提供了抽象控制類型,從該類型出發(fā)可定制出許多的類型。例如,你也許想建立TListBox的特殊類型,這種部件沒有標(biāo)準(zhǔn)TListBox的某些屬性,你不能將屬性從一個祖先類型中移去,因此你需要從比TListBox更高層次的部件繼承。例如TCustomListBox,該部件實現(xiàn)了TCustomListBox的所有屬性但沒有公布(Publishing)它們。當(dāng)從一個諸如TCustomListBox的抽象類中繼承時,你公布那些你想使之可獲得的屬性而讓其它的保護(hù)起來(protected)。
2. 建立原始控制
標(biāo)準(zhǔn)控制是在運行時可見的。這些標(biāo)準(zhǔn)控制都從TWinControl,繼承來的,當(dāng)你建立原始控制時,你使用TCustomControl作為起始點。標(biāo)準(zhǔn)控制的關(guān)鍵特征是它具有窗口句柄,句柄保存在屬性Handle中,這種控制:
● 能接受輸入焦點
● 能將句柄傳送給Windows API函數(shù)
如果控制不需要接受輸入焦點,你可把它做成圖形控制,這可能節(jié)省系統(tǒng)資源。
3. 建立圖形控制
圖形控制非常類似定制的控制,但它們沒有窗口句柄,因此不占有系統(tǒng)資源。對圖形控制最大的限制是它們不能接收輸入焦點。你需要從TGraphicControl繼承,它提供了作圖的Canvas和能處理WM_PAINT消息,你需要覆蓋Paint方法。
4. 繼承窗口控制
Windows中有一種稱之為窗口類的概念,類似于面向?qū)ο蟮膶ο蠛皖惖母拍。窗口類是Windows中相同窗口或控制的不同實例之間共享的信息集合。當(dāng)你用傳統(tǒng)的Windows編程方法創(chuàng)建一種新的控制,你要定義一個新的窗口類,并在Windows中注冊。你也能基于已有的窗口類創(chuàng)建新的窗口類。這就稱為從窗口類繼承。在傳統(tǒng)的Windows編程中,如果你想建立客戶化的控制,你就必須將其做在動態(tài)鏈接庫里,就象標(biāo)準(zhǔn)Windows控制,并且提供一個訪問界面。使用Delphi,你能創(chuàng)建一個部件包裝在已有窗口類之上。如果你已有客戶化控制的庫,并想使其運行在你的Delphi應(yīng)用中,那你就能創(chuàng)建一個使你能使用已有控制和獲得新的控制的部件。在庫單元StdCtrls中有許多這樣的例子。
5. 建立非可視化的部件
抽象對象類型TComponent是所有部件的基礎(chǔ)類型。從TComponent直接繼承所創(chuàng)建的部件就是非可視化部件。你編寫的大多數(shù)部件都是可視控制。TComponent定義了部件在FormDesigner中所需的基本的屬性和方法。因此,從TComponent繼承來的任何部件都具備設(shè)計能力。
非可視部件相當(dāng)少,主要用它們作為非可視程序單元(如數(shù)據(jù)庫單元)和對話框的界面。
相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |