![]() |
Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
Hei ihr,
gibt es eine gute Methode zu prüfen ob ein TObject, welches der Sender ist, ein bestimmtest Property hat? Ich möchte im OnMouseDown einer Form (oder OnClick einer Kompo) ermitteln ob der Sender eine Caption hat. Wenn ja möchte ich etwas damit machen. |
Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
Wenn das Objekt von TPersistent abgeleitet ist (oder AFAIR irgendein Kompilerschalter aktiviert ist), sollte das über die RTTI gehen.
Delphi-Quellcode:
Wie der Name schon sagt, muss die Property published sein :wink: .
TypInfo.IsPublishedProp(Sender, 'Caption')
[edit]Auslesen wäre natürlich auch nicht schlecht: TypInfo.GetStrProp [/edit] |
Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
Hi,
Die Eigenschaft Caption wird meines Wissens von TControl eingeführt. Also könnte man mittels Irgendwas.InheritsFrom(TControl) feststellen, ob Irgendwas eine Caption hat. Allerdings hat eine Prozedur vom Typ TNotifyEvent einen Parameter vom Typ TComponent, der wiederum von TControl erbt. Daher kann man innerhalb einer Prozedur "OnIrgenEinEreignis(Sender:TComponent)" einfach davon ausgehen, dass der Sender eine Caption besitzt. (richtig?) Gruß tomsel |
Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
Hallo,
Zitat:
Gruß xaromz |
Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
ja, stimmt, sorry. Aber InheritsFrom sollte funktionieren.
tomsel |
Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
Zitat:
Zitat:
Gruß Der Unwissende |
Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
Hi,
RTTI ist sicher ein guter Weg! Dann funktioniert es auch bei eigenen Objekten, die nicht von TComponent abgeleitet sind. Dieses Beispiel ändert die Caption des Senders:
Delphi-Quellcode:
Nicht vergessen, Unit TypInfo in uses...
procedure TForm1.Button1Click(Sender: TObject);
begin if IsPublishedProp(Sender, 'Caption') then SetStrProp(Sender, 'Caption', 'Hallo'); end; Gruß, Frank |
Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
Hai ihr,
danke für eure Tips. Ich habe jetzt den Code von der Datenspinne *g* genommen da er genau das macht was ich in meinem Programm einbauen wollte (mit einer kleinen Anpassung) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz