Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat? (https://www.delphipraxis.net/58553-ermitteln-ob-eine-kompo-klasse-eine-eigenschaft-hat.html)

Sharky 8. Dez 2005 18:42


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.

Khabarakh 8. Dez 2005 18:51

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:
TypInfo.IsPublishedProp(Sender, 'Caption')
Wie der Name schon sagt, muss die Property published sein :wink: .

[edit]Auslesen wäre natürlich auch nicht schlecht:
TypInfo.GetStrProp
[/edit]

tomsel 8. Dez 2005 18:54

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

xaromz 8. Dez 2005 19:00

Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
 
Hallo,
Zitat:

Zitat von tomsel
Allerdings hat eine Prozedur vom Typ TNotifyEvent einen Parameter vom Typ TComponent, der wiederum von TControl erbt.

Nö, TNotifyEvent hat ein TObject als Parameter, muss ja flexibel bleiben...

Gruß
xaromz

tomsel 8. Dez 2005 19:04

Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
 
ja, stimmt, sorry. Aber InheritsFrom sollte funktionieren.

tomsel

Der_Unwissende 9. Dez 2005 08:08

Re: Ermitteln ob eine Kompo (Klasse) eine Eigenschaft hat?
 
Zitat:

Zitat von tomsel
Die Eigenschaft Caption wird meines Wissens von TControl eingeführt.

Stimmt.

Zitat:

Zitat von tomsel
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?)

Umkekehrt, TControl erbt von TComponent und damit hätte auch kein Parameter vom Typ TComponent eine Caption (ab TControl ist's sichtbar).

Gruß Der Unwissende

dataspider 9. Dez 2005 08:18

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:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsPublishedProp(Sender, 'Caption') then
    SetStrProp(Sender, 'Caption', 'Hallo');
end;
Nicht vergessen, Unit TypInfo in uses...
Gruß, Frank

Sharky 10. Dez 2005 07:48

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 08:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz