Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
如何判斷哪些元件有某一特定的 property, 如 DataSet property.
我想要作的是在程式當中動態地判斷,而不是靜態地寫死在程式裡, 例如有一函數為:
function HasDataSet(AnObject:TObject):Boolean; begin Result:=False; if (AnObject 有 DataSet Property) then Result:=True; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ end;
請問各位, 上式中的 IF 判斷應該怎麼寫呢?
註:我要判斷的可能不只是 DataSet 哦, 以後還要判斷別的(如 Font), 這只是一個例子而已. 希望高手幫忙一下,謝謝.
您可以試試以下這段程式:
implementation uses TypInfo; {$R *.DFM} function HasProperty(AObject: TObject; const APropName: string): boolean; begin Result := GetPropInfo(AObject.ClassInfo, APropName) <> nil; end; procedure TForm1.Button1Click(Sender: TObject); begin { GetPropInfo(TypeInfo: PTypeInfo; const PropName: string): PPropInfo; } if HasProperty(Button1, 'Caption') then ShowMessage('Yes') else ShowMessage('No'); end;
說明
TypInfo 這個單元的介面定義您可以在 Delphi Doc 目錄中一個名為 TypInfo.int的檔案中找到, 利用 TObject 的 ClassInfo 取得 run-time type information(RTTI) table 的指標, 然後利用 TypInfo 單元中的 GetPropInfo 函數判斷傳回值是否為 nil 來決定是否有這個屬性.
有沒有人知道 Delphi 的 Object Browser 是不是也應用 TypInfo 單元取出全部物件的屬性.方法.事件呢?
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |