所有元件屬 VCL 繼承樹一部分,TComponent 為共同祖先。建立新元件即從現有類型繼承。五大主要途徑對應起始類別:
| 途徑 | 起始類別 |
|---|---|
| 修改現有元件 | 任何現有元件(TButton、TListBox)或抽象基類(TCustomListBox) |
| 建立原始控制項 | TCustomControl |
| 建立圖形控制項 | TGraphicControl |
| 建立視窗控制項子類 | TWinControl |
| 建立非可視元件 | TComponent |
亦可繼承非元件物件(TIniFile、TFont),但無法於表單設計器操作。
最簡單方式:繼承現有元件並客製化。可修改預設屬性值。對 TListBox 等擁有大量屬性的控制項,若需隱藏部分屬性,應繼承抽象基類(TCustomListBox),僅發布 (published) 所需屬性,其餘保留 protected。
標準控制項繼承自 TWinControl,擁有視窗控制代碼 (Handle),可接收輸入焦點、傳遞 Windows API。若需此特性,從 TCustomControl 繼承。
無視窗控制代碼,不佔用系統資源,但無法接收輸入焦點。繼承 TGraphicControl,提供 Canvas 繪圖,需覆寫 Paint 方法處理 WM_PAINT。
Windows 視窗類概念與 OOP 類別對應。傳統開發需定義新視窗類並註冊。Delphi 允許建立封裝既有視窗類的元件,或封裝現有 DLL 控制項。StdCtrls 單元多此類範例。
直接繼承 TComponent。具備設計期基本功能(屬性、事件、持久化),主要作為非可視程式單元(資料庫、對話框)介面。
兩種方式:手工建立、使用元件精靈。完成後安裝至調色盤即可測試。
三步驟:建立單元 → 宣告繼承類別 → 註冊元件。
File/New/Unit 或開啟現有單元(不可含表單)interface 區加入型別定義type
TNewComponent = class(TComponent)
end;
interface 宣告 procedure Register;,implementation 實作呼叫 RegisterComponents('Samples', [TNewComponent]);File/New/Component 填寫:元件名稱、祖先類別、調色盤頁面。自動執行手工三步驟,但無法加入現有單元。完成後立即儲存單元。