作為組件制作的開始應該了解一些概念我以為這些概念是非常重要的將可以作為以後實踐的理論基礎
一組件的簡要層次結構
一般情況下VCL的組件可以從Tcomponent為開始其最明顯的特征就是它的屬性可以在設計時通過對象察看器來操縱另外他還能擁有其他組件
從Tcomponent下分出非可視組件和可視組件
非可視組件如TOPenDialogTTimerTTable等這些組件因為繼承自Tomponent所以也就繼承了在設計時可以被操縱的特性
可視化組件始自TControl是它引入了可視化屬性和方法使繼承自它的類都有了這些可視化特性
TControl又分出兩類組件類型從TWinControl(窗口控件)自下的控件和從TGraphicControl(圖形控件)自下的控件繼承自TWinControl的控件將Windows控件進行封裝所以擁有Windows控件的很多特性比如可以得到焦點有唯一的句柄用戶可以通過發送消息與這些控件進行交互等而繼承自TGraphicControl的控件也是可見的但沒有句柄可以稱之為圖形控件比如TLabelTBevel都是Delphi畫出來的並不占用系統資源
二屬性
先看一個簡單的屬性定義
TsomeObj=class
Private
FCount:integer;
Protected
Procedure SetCount(value:Integer);
published
Property count:integer read FCount write SetCount default ;//屬性定義
End;
該屬性從私有成員FCount讀出值而靠SetCount方法設置值到私有成員FCount
屬性的優勢在於可以很直觀進行讀寫而又不同於私有成員因為屬性可以通過寫訪問方法來保護私有成員
Procedure TsomeBojSetCount(value:Integer);
Begin
If FCount<>value then
FCount:=value;
End;
其中屬性定義中的Default 並不是默認值(即對象察看器顯示的值)默認值要在組件類的構造函數中設定而Default有這樣的作用決定DFM文件中是否要保存該屬性的值比如上面為Default 即當該屬性值為時則該屬性不會被保存到DFM中如果該屬性值不為則該屬性會被保存到DFM中另外屬性定義還有一個關鍵字為
NoDefault設置了這個關鍵字比如
Property count:integer read FCount write SetCount NoDefault;
則無論它的值是什麼都會被寫到DFM文件中
[] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/24874.html