Autor Beitrag
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Mo 19.07.04 17:40 
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:

ausblenden 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:
ausblenden 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]

_________________
JSXGraph


Zuletzt bearbeitet von raziel am Mi 21.07.04 19:41, insgesamt 3-mal bearbeitet