Prüfen, ob ein Object eine bestimmte Eigenschaft besitzt
Um herauszufinden, ob ein von TPersistent abgeleitetes Object über eine bestimmte "published" Eigenschaft verfügt, kann man die Funktion
GetPropInfo aus der Unit
TypInfo verwenden:
Beispiel
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); var j: Integer; p: PPropInfo; begin for j := 0 to ComponentCount-1 do begin p := GetPropInfo(Components[j].ClassInfo, 'Caption'); if (p <> nil) and (p^.setProc <> nil) then SetStrProp(Components[j], 'Caption', 'Hello, World!'); end; end; |
Bei GetPropInfo handelt es sich um eine überladene Funktion, die Syntax dafür ist jeweils:
GetPropInfo-Syntax
1: 2: 3: 4: 5: 6: 7:
| function GetPropInfo(Instance: TObject; const PropName: string; AKinds: TTypeKinds = []): PPropInfo; overload; function GetPropInfo(AClass: TClass; const PropName: string; AKinds: TTypeKinds = []): PPropInfo; overload; function GetPropInfo(TypeInfo: PTypeInfo; const PropName: string): PPropInfo; overload; function GetPropInfo(TypeInfo: PTypeInfo; const PropName: string; AKinds: TTypeKinds): PPropInfo; overload; |
TTypeKinds ist als
TTypeKinds = set of TTypeKind definiert. Für Infos zu TTypeKind siehe Delphi-Hilfe.
Der Rückgabewert ist immer ein Zeiger auf
TPropInfo (siehe Delphi-Hilfe). Ist der Rückgabewert
nil, dann besitzt das Objekt keine wie in
PropName angegebene Eigenschaft.
thx to maximus, StefanH und UC-Chewie für die Hinweise!
raziel
Moderiert von jasocul: Beitrag geprüft am 11.05.2006
[meta]TPersistent Eigenschaft GetPropInfo TTypeKinds[/meta]