元件開發是 C++ Builder 進階開發者的核心技能。本系列結合 VCL 源碼分析與實戰經驗,系統講解從繼承選擇、訊息處理、繪圖、事件定義到專業元件實戰。本文為第一篇,奠定繼承體系與訊息機制基礎。
$(DELPHI)\Source\Vcl 加入 Search Path,**Ctrl+點擊即可跳轉 VCL 源碼**,比任何 grep 都快。參考 CKER 經典文章《VCL 訊息機制詳解》。核心點:
TObject → TPersistent → TComponent → TControl → TWinControl → TCustomControl / TGraphicControl。TWinControl 衍生類擁有視窗句柄(HWND),能接收 Windows 訊息。TGraphicControl 無句柄,繪圖由父視窗代勞,輕量但無法接收鍵盤焦點。WndProc、訊息映射宏、虛擬函數(MouseDown 等)。| 需求 | 推薦基類 | 理由 |
|---|---|---|
| 有介面、需鍵盤焦點、非容器 | TCustomControl | 擁有 HWND、Canvas、完整訊息迴路、可接收鍵盤輸入 |
| 有介面、無需鍵盤、需滑鼠互動 | TGraphicControl | 無 HWND 開銷、繪圖由父視窗統一、適合簡單圖形/標籤 |
| 無視覺介面(對話框、計時器、資料模組) | TComponent | 純邏輯/非視覺元件,設計時期可拖放、屬性編輯 |
**切記**:繼承 TControl 直接子類(TCustomControl/TGraphicControl),而非 TControl 本身(它是抽象基類)。
所有 VCL 元件源碼在 $(DELPHI)\Source\Vcl。學習方法:
TButton、TPanel、TEdit)。.pas 源碼:繼承鏈、訊息映射、虛擬函數重寫、屬性定義、事件觸發。Ctrl+點擊 跳轉關鍵方法實現,建立心智模型。forums.borland.com)搜尋/提問,專家雲集。Paint、MouseDown/Up/Move、KeyDown/Up/Press、DYNAMIC 關鍵字)New VCL Component)。TButton 源碼改造),而非從零手寫。FDesignMode、Paint 中區分運行/設計、CM_DESIGNHITTEST。Loaded 延遲初始化。