?? 047.htm
字號:
face="Arial" size="3">Windows</font><font face="宋體" lang="ZH-CN" size="3">控制的子類</p>
<p> ●</font><font face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN"
size="3">建立非可視部件</p>
<p> </p>
<p> 下表列出了不同建立途徑的起始類</p>
<p> </font><font face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3">表</font><font face="Arial" size="3">19.1
</font><font face="宋體" lang="ZH-CN" size="3">定義部件的起始點</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> 途</font><font face="Arial"
size="3"> </font><font face="宋體" lang="ZH-CN" size="3">徑 </font><font
face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">起</font><font
face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">始</font><font
face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">類</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> </font><font face="Arial" size="3">
</font><font face="宋體" lang="ZH-CN" size="3">─────────────────────────────</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3">修改已有部件</font><font
face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3"> </font><font
face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">任何已有部件,如</font><font
face="Arial" size="3">TButton</font><font face="宋體" lang="ZH-CN" size="3">、</font><font
face="Arial" size="3">TListBox</p>
<p></font><font face="宋體" lang="ZH-CN" size="3">或抽象部件對象如</font><font
face="Arial" size="3">TCustomListBox</p>
<p></font><font face="宋體" lang="ZH-CN" size="3">建立原始控制 </font><font
face="Arial" size="3"> TCustomControl</p>
<p></font><font face="宋體" lang="ZH-CN" size="3">建立圖形控制</font><font
face="Arial" size="3"> TGraphicControl</p>
<p></font><font face="宋體" lang="ZH-CN" size="3">建立窗口控制的子類</font><font
face="Arial" size="3"> TWinControl</p>
<p></font><font face="宋體" lang="ZH-CN" size="3">建立非可視部件 </font><font
face="Arial" size="3"> TComponent</p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p> </p>
<p> 也可以繼承非部件的其它對象,但無法在窗體設(shè)計窗口中操作它們。</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">包括許多這種對象,如</font><font
face="Arial" size="3">TINIFile</font><font face="宋體" lang="ZH-CN" size="3">、</font><font
face="Arial" size="3">TFont</font><font face="宋體" lang="ZH-CN" size="3">等。</p>
<p> </font><font face="Arial" size="3">1. </font><font face="宋體" lang="ZH-CN"
size="3">修改已有控制</p>
<p> 建立部件的最簡單的方法是繼承一個已有的、可用的部件并定制它??梢詮?lt;/font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">提供的任何部件中繼承。例如,可以改變標(biāo)準(zhǔn)控制的缺省屬性值,如</font><font
face="Arial" size="3">TButton</font><font face="宋體" lang="ZH-CN" size="3">。</p>
<p> 有些控制,如</font><font face="Arial" size="3">Listbox</font><font
face="宋體" lang="ZH-CN" size="3">和</font><font face="Arial" size="3">Grid</font><font
face="宋體" lang="ZH-CN" size="3">等有許多相同變量,在這種情況下,</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">提供了抽象控制類型,從該類型出發(fā)可定制出許多的類型。例如,你也許想建立</font><font
face="Arial" size="3">TListBox</font><font face="宋體" lang="ZH-CN" size="3">的特殊類型,這種部件沒有標(biāo)準(zhǔn)</font><font
face="Arial" size="3">TListBox</font><font face="宋體" lang="ZH-CN" size="3">的某些屬性,你不能將屬性從一個祖先類型中移去,因此你需要從比</font><font
face="Arial" size="3">TListBox</font><font face="宋體" lang="ZH-CN" size="3">更高層次的部件繼承。例如</font><font
face="Arial" size="3">TCustomListBox</font><font face="宋體" lang="ZH-CN" size="3">,該部件實現(xiàn)了</font><font
face="Arial" size="3">TCustomListBox</font><font face="宋體" lang="ZH-CN" size="3">的所有屬性但沒有公布</font><font
face="Arial" size="3">(Publishing)</font><font face="宋體" lang="ZH-CN" size="3">它們。當(dāng)從一個諸如</font><font
face="Arial" size="3">TCustomListBox</font><font face="宋體" lang="ZH-CN" size="3">的抽象類中繼承時,你公布那些你想使之可獲得的屬性而讓其它的保護(hù)起來</font><font
face="Arial" size="3">(protected)</font><font face="宋體" lang="ZH-CN" size="3">。</p>
<p> </font><font face="Arial" size="3">2. </font><font face="宋體" lang="ZH-CN"
size="3">建立原始控制</p>
<p> 標(biāo)準(zhǔn)控制是在運行時可見的。這些標(biāo)準(zhǔn)控制都從</font><font
face="Arial" size="3">TWinControl</font><font face="宋體" lang="ZH-CN" size="3">,繼承來的,當(dāng)你建立原始控制時,你使用</font><font
face="Arial" size="3">TCustomControl</font><font face="宋體" lang="ZH-CN" size="3">作為起始點。標(biāo)準(zhǔn)控制的關(guān)鍵特征是它具有窗口句柄,句柄保存在屬性</font><font
face="Arial" size="3">Handle</font><font face="宋體" lang="ZH-CN" size="3">中,這種控制:</p>
<p> </font><font face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">●</font><font
face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">能接受輸入焦點</p>
<p> </font><font face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">●</font><font
face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">能將句柄傳送給</font><font
face="Arial" size="3">Windows API</font><font face="宋體" lang="ZH-CN" size="3">函數(shù)</p>
<p> </p>
<p> 如果控制不需要接受輸入焦點,你可把它做成圖形控制,這可能節(jié)省系統(tǒng)資源。</p>
<p> </font><font face="Arial" size="3">3. </font><font face="宋體" lang="ZH-CN"
size="3">建立圖形控制</p>
<p> 圖形控制非常類似定制的控制,但它們沒有窗口句柄,因此不占有系統(tǒng)資源。對圖形控制最大的限制是它們不能接收輸入焦點。你需要從</font><font
face="Arial" size="3">TGraphicControl</font><font face="宋體" lang="ZH-CN" size="3">繼承,它提供了作圖的</font><font
face="Arial" size="3">Canvas</font><font face="宋體" lang="ZH-CN" size="3">和能處理</font><font
face="Arial" size="3">WM_PAINT</font><font face="宋體" lang="ZH-CN" size="3">消息,你需要覆蓋</font><font
face="Arial" size="3">Paint</font><font face="宋體" lang="ZH-CN" size="3">方法。</p>
<p> </font><font face="Arial" size="3">4. </font><font face="宋體" lang="ZH-CN"
size="3">繼承窗口控制</font><font face="Arial" size="3"></p>
<p>Windows</font><font face="宋體" lang="ZH-CN" size="3">中有一種稱之為窗口類的概念,類似于面向?qū)ο蟮膶ο蠛皖惖母拍?。窗口類?lt;/font><font
face="Arial" size="3">Windows</font><font face="宋體" lang="ZH-CN" size="3">中相同窗口或控制的不同實例之間共享的信息集合。當(dāng)你用傳統(tǒng)的</font><font
face="Arial" size="3">Windows</font><font face="宋體" lang="ZH-CN" size="3">編程方法創(chuàng)建一種新的控制,你要定義一個新的窗口類,并在</font><font
face="Arial" size="3">Windows</font><font face="宋體" lang="ZH-CN" size="3">中注冊。你也能基于已有的窗口類創(chuàng)建新的窗口類。這就稱為從窗口類繼承。在傳統(tǒng)的</font><font
face="Arial" size="3">Windows</font><font face="宋體" lang="ZH-CN" size="3">編程中,如果你想建立客戶化的控制,你就必須將其做在動態(tài)鏈接庫里,就象標(biāo)準(zhǔn)</font><font
face="Arial" size="3">Windows</font><font face="宋體" lang="ZH-CN" size="3">控制,并且提供一個訪問界面。使用</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">,你能創(chuàng)建一個部件包裝在已有窗口類之上。如果你已有客戶化控制的庫,并想使其運行在你的</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">應(yīng)用中,那你就能創(chuàng)建一個使你能使用已有控制和獲得新的控制的部件。在庫單元</font><font
face="Arial" size="3">StdCtrls</font><font face="宋體" lang="ZH-CN" size="3">中有許多這樣的例子。</p>
<p> </font><font face="Arial" size="3">5. </font><font face="宋體" lang="ZH-CN"
size="3">建立非可視化的部件</p>
<p> 抽象對象類型</font><font face="Arial" size="3">TComponent</font><font
face="宋體" lang="ZH-CN" size="3">是所有部件的基礎(chǔ)類型。從</font><font
face="Arial" size="3">TComponent</font><font face="宋體" lang="ZH-CN" size="3">直接繼承所創(chuàng)建的部件就是非可視化部件。你編寫的大多數(shù)部件都是可視控制。</font><font
face="Arial" size="3">TComponent</font><font face="宋體" lang="ZH-CN" size="3">定義了部件在</font><font
face="Arial" size="3">FormDesigner</font><font face="宋體" lang="ZH-CN" size="3">中所需的基本的屬性和方法。因此,從</font><font
face="Arial" size="3">TComponent</font><font face="宋體" lang="ZH-CN" size="3">繼承來的任何部件都具備設(shè)計能力。</p>
<p> 非可視部件相當(dāng)少,主要用它們作為非可視程序單元(如數(shù)據(jù)庫單元)和對話框的界面。</p>
<p> </font><font face="Arial" size="3"></p>
<p>19.2.1.3 </font><font face="宋體" lang="ZH-CN" size="3">建立新部件的方法</p>
<p> </p>
<p> 建立新部件的方法有兩種:</p>
<p> ●</font><font face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN"
size="3">手工建立部件</font><font face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> ●</font><font face="Arial"
size="3"> </font><font face="宋體" lang="ZH-CN" size="3">使用</font><font face="Arial"
size="3">Component Expert</p>
<p> </p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> 一旦完成建立后,就得到所需的最小功能單位的部件,并可以安裝在</font><font
face="Arial" size="3">Component Palette</font><font face="宋體" lang="ZH-CN" size="3">上。安裝完后,你就能將新部件放置在窗體窗口,并可在設(shè)計階段和運行階段進(jìn)行測試。你還能為部件增加新的特征、更新選擇板、重新測試。</p>
<p> </font><font face="Arial" size="3">1. </font><font face="宋體" lang="ZH-CN"
size="3">手工創(chuàng)建部件</font><font face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3">顯然創(chuàng)建部件最容易的方法是使用</font><font
face="Arial" size="3">Component Expert</font><font face="宋體" lang="ZH-CN" size="3">。然而,你也能通過手工來完成相同步驟。</p>
<p> 手工創(chuàng)建部件需要下列三步:</p>
<p> </font><font face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">●</font><font
face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN" size="3">創(chuàng)建新的庫單元</p>
<p> ●</font><font face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN"
size="3">繼承一個部件對象</font><font face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3"> ●</font><font face="Arial"
size="3"> </font><font face="宋體" lang="ZH-CN" size="3">注冊部件</p>
<p> </p>
<p> ?、?lt;/font><font face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN"
size="3">創(chuàng)建新的庫單元</p>
<p> 庫單元是</font><font face="Arial" size="3">Object Pascal</font><font
face="宋體" lang="ZH-CN" size="3">代碼的獨立編譯單位。每一個窗體有自己的庫單元。大多數(shù)部件(在邏輯上是一組)也有自己的庫單元。</p>
<p> 當(dāng)你建立部件時,你可以為部件創(chuàng)建一個庫單元,也可將新的部件加在已有的庫單元中。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3">?、?lt;/font><font face="Arial"
size="3"> </font><font face="宋體" lang="ZH-CN" size="3">為部件創(chuàng)建庫單元,可選擇</font><font
face="Arial" size="3">File/New... </font><font face="宋體" lang="ZH-CN" size="3">,在</font><font
face="Arial" size="3">New Items</font><font face="宋體" lang="ZH-CN" size="3">對話框中選擇</font><font
face="Arial" size="3">Unit</font><font face="宋體" lang="ZH-CN" size="3">,</font><font
face="Arial" size="3">Delphi</font><font face="宋體" lang="ZH-CN" size="3">將創(chuàng)建一個新文件,并在代碼編輯器中打開它</font><font
face="Arial" size="3"></p>
<p></font><font face="宋體" lang="ZH-CN" size="3">?、?lt;/font><font face="Arial"
size="3"> </font><font face="宋體" lang="ZH-CN" size="3">在已有庫單元中增加部件,只須選擇</font><font
face="Arial" size="3">File/OPen</font><font face="宋體" lang="ZH-CN" size="3">為已有庫單元選擇源代碼。在該庫單元中只能包含部件代碼,如果該庫單元中有一個窗體,將產(chǎn)生錯誤</p>
<p> </p>
<p> ?、?lt;/font><font face="Arial" size="3"> </font><font face="宋體" lang="ZH-CN"
size="3">繼承一個部件對象</p>
<p> 每個部件都是</font><font face="Arial" size="3">TComponent</font><font
face="宋體" lang="ZH-CN" size="3">的后代對象。也可從</font><font face="Arial"
size="3">TControl</font><font face="宋體" lang="ZH-CN" size="3">、</font><font
face="Arial" size="3">TGraphicControl</font><font face="宋體" lang="ZH-CN" size="3">等繼承。</p>
<p> 為繼承一個部件對象,要將對象類型聲明加在庫單元的</font><font
face="Arial" size="3">interface</font><font face="宋體" lang="ZH-CN" size="3">部分。</p>
<p> 例如,建立一個最簡單的從</font><font face="Arial" size="3">TComponent</font><font
face="宋體" lang="ZH-CN" size="3">直接繼承非可視的部件,將下列的類型定義加在部件單元的</font><font
face="Arial" size="3">interface</font><font face="宋體" lang="ZH-CN" size="3">部分。</p>
<p> </p>
<p> </font><font face="Arial" size="3">type</p>
<p>TNewComponent=class(TComponent)</p>
<p></font><font face="宋體" lang="ZH-CN" size="3">……</font><font face="Arial"
size="3"></p>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -