、 象文本一樣編輯屬性
所有的屬性都需要將它們的值在Object Inspector窗口中以文本的方式顯示。屬性編輯器對象提供了文本表現(xiàn)和實際值之間轉(zhuǎn)換的虛方法。這些虛方法是GetValue和SetValue,你的屬性編輯器也能繼承了一系列的方法用于讀和寫不同類型的值。見下表:
表19.5 讀寫屬性值的方法
━━━━━━━━━━━━━━━━━━━━━━━━━━
屬性類型 "Get"方法 "Set"方法
──────────────────────────
浮點數(shù) GetFloatValue SetFloatVallue
方法指針 GetMethodValue SetMehodValue
有序類型 GetOrdValue SetOrdValue
字符串 GetStrValue SetStrValue
━━━━━━━━━━━━━━━━━━━━━━━━━━
當覆蓋GetValue方法時,調(diào)用一個"Get"方法;當覆蓋SetValue方法時調(diào)用一個"Set"方法。
屬性編輯器的GetValue方法返回一個字符串以表現(xiàn)當前屬性值。缺省情況下GetValue返回 "unknown"。
屬性編輯器的SetValue接收Object Inspector窗口String類型的參數(shù),并將其轉(zhuǎn)換成合適的類型,并設(shè)置屬性值。
下面是TIntegerProperty的GetValue和SetValue的例子:
function TIntegerProperty GetValue: string;
begin
Result := IntToStr (GetOrdValue);
end;
proceduve TIntegerPropertySetValue (Const Value: string);
var
L: Longint;
begin
L := StrToInt(Value); { 將字符串轉(zhuǎn)換為數(shù)學(xué) }
with GetTypeData (GetPropType)^ do
if ( L < Minvalue ) or ( L > MaxValue ) then
Raise EPropertyError.Create (FmtloadStr(SOutOfRange,
[MinValue,MaxValue]));
SetOrdValue (L);
end;
、 將屬性作為一個整體來編輯
Delphi支持提供用戶以對話框的方式可視化地編輯屬性。這種情況常用于對對象類型屬性的編輯。一個典型的例子是Font屬性,用戶可以找開Font對話框來選擇字體的屬性。
提供整體屬性編輯對話框,要覆蓋屬性編輯對象的Edit方法。Edit方法也使用 "Get"和"Set"方法。
在大多數(shù)部件中使用的Color屬性將標準的Windows顏色對話框作為屬性編輯器。下面是TColorProperty的Edit方法
procedure TColorProperty.Edit
var
ColorDialog: TColorDialog;
begin
ColorDialog := TColorDialog.Create(Application); { 創(chuàng)建編輯器 }
try
ColorDialog.Color := GetOrdValue; { 使用已有的值 }
if ColorDialog.Execute then
SetOrdValue (ColorDialog.Color);
finally
ColorDialog.Free;
end;
end;
⑷ 描述編輯器的屬性
屬性編輯必須告訴Object Inspector窗口如何采用合適的顯示工具。例如Object Inspector窗口需要知道屬性是否有子屬性,或者是否能顯示可能取值的列表。描述編輯器的屬性通常覆蓋屬性編輯器的GetAttributes方法。
GetAttributes返回TPropertyAttributes類型的集合。集合中包括表中任何或所有的值:
表19.6 屬性編輯器特征標志
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
標志 含 義 相關(guān)方法
──────────────────────────────
paValuelist 編輯器能給予一組枚舉值 GetValues
paSubPropertie 屬性有子屬性 GetPropertises
paDialog 編輯器能顯示編輯對話框 Edit
PaMultiSelect 當用戶選擇多于一個部件
時,屬性應(yīng)能顯示 N/A
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Color屬性是靈活的,它允許在Object Inspector窗口中以多種方式選擇他們;蛘哝I入,或者從列表中選擇定編輯器。因此TColorProperty的GetAttributes方法在返回值中包含多種屬性。
function TColorProperty.GetAttributes: TProrertyAttributes;
begin
Result := [PaMultiselect, paDialog, paValuelist];
end;
相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |