屬性(Property)是部件中最特殊的部分
為了使你在部件中更好地使用屬性
● 為什麼要創建屬性
● 屬性的種類
● 公布(publishing)繼承的屬性
● 定義部件屬性
● 編寫屬性編輯器
屬性提供非常重要的好處
從部件使用者的觀點看
從部件編寫者的觀點看屬性比對象的域有更強的功能
⑴ 用戶可以在設計時設置屬性
這是非常重要的
⑵ 屬性能隱藏詳細的實現細節
⑶ 屬性能引起簡單地賦值之外的響應
⑷ 用於屬性的實現方法可以是虛擬方法
屬性可以是函數能返回的任何類型
你也能在注冊部件時描述不同的屬性編輯器
下表列出屬性出現在Object Inspector窗口中的方式
表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
屬性類型 處 理 方 式
───────────────────────────────────────
簡單類型 Numeric
枚舉類型 枚舉類型的屬性顯示值的方式定義在代碼中
集合類型 集合類型出現在Object Inspector窗口中時正如一個集合
對象類型 作為對象的屬性本身有屬性編輯器
數組類型 數組屬性必須有它們自己的屬性編輯器
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
所有部件都從祖先類型繼承屬性
type
TSampleComponent=class(TWinControl)
published
property Ctl
end;
⑴ 屬性的聲明
聲明部件的屬性
● 屬性名
● 屬性的類型
● 讀和設置屬性值的方法
至少
type
TYourComponent=class(TComponent)
…
private
FCount: Integer { 內部存儲域 }
function GetCount: Integer; { 讀方法 }
procedure SetCount(ACount: Integer)
pubilic
property Count: Integer read GetCount write SetCount;
end;
⑵ 內部數據存儲
關於如何存儲屬性的數據值
● 屬性數據存儲在對象的數據域處
● 屬性對象域的標識符以F開頭
● 屬性數據的對象域應聲明在private部分
後代部件只應使用繼承的屬性自身
⑶ 直接訪問
使屬性數據可用的最簡單的辦法是直接訪問
下面的部件聲明演示了怎樣在屬性定義的read 和write部分都采用直接訪問
type
TYourComponent=class(TComponent)
…
private { 內部存儲是私有 }
FReadOnly: Boolean; { 聲明保存屬性值的域 }
published { 使屬性在設計時可用 }
property ReadOnly: Boolean read FReadOnly write FReadOnly;
end;
⑷ 訪問方法
屬性的聲明語法允許屬性聲明的read和write部分用訪問方法取代對象私有數據域
① 讀方法
屬性的讀方法是不帶參數的函數
② 寫方法
屬性的寫方法總是只帶一個參數的過程
如果沒有聲明寫方法
通常在設置新值前要檢測新值是否與當前值不同
下面是一個簡單的整數屬性Count的寫方法
procedure TMyComponent
begin
if value <>FCount then
begin
FCount := Value;
update;
end;
end;
⑸ 缺省屬性值
當聲明一個屬性
Delphi使用聲明缺省值決定是否將屬性值存在DFM文件中
當重聲明一個屬性時
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25117.html