Entwickler-Ecke

Visual Component Library (VCL) - ... prüfen, ob ein Object eine bestimmte Eigenschaft besitzt


raziel - Mo 19.07.04 17:40
Titel: ... prüfen, ob ein Object eine bestimmte Eigenschaft besitzt
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
  // Alle Komponente auf der Form durchlaufen
  for j := 0 to ComponentCount-1 do
  begin
    p := GetPropInfo(Components[j].ClassInfo, 'Caption');
    // Prüfen, ob die Eigenschaft "Caption" existiert
    if (p <> niland (p^.setProc <> nilthen
      // Sie existiert -> Der Eigenschaft einen Wert zuweisen
      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 alsTTypeKinds = 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 user profile iconjasocul: Beitrag geprüft am 11.05.2006
[meta]TPersistent Eigenschaft GetPropInfo TTypeKinds[/meta]