![]() |
Prüfen, ob eine Klasse eine bestimmte Methode enthält
Hallo,
wie kann ich prüfen, ob eine Klasse eine bestimmte Methode enthält oder nicht?
Delphi-Quellcode:
MFG Christian18
if FindMethod(ClassName, MethodName) then
begin // Ja end else begin // Nein end; function FindMethod(ClassName: TClass; MethodName: TMethod) : Boolean; begin // ??? end; |
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
Das geht nur, wenn die Methode published ist und du nicht den Klassennamen, sondern die Klasse selbst hast oder die Klasse registriert ist (RegisterClass).
|
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
Stichwort ist RTTI welche nur bei published-Elementen in ausreichender Form zur verfügung stehen.
Wieso benötigst du sowas? |
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
man kann auch stattdessen Interfaces verwenden. Wenn man ein Interface definiert und überprüft, ob eine Klasse dieses Interface implementiert, dann enthält es eben all diese Methoden.
|
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
Naja,
ich habe mir eine kleine Routine geschrieben, womit ich das Fenster design über eine Xml Datei steuern kann. <FormName> <Label Top="100" Left="100" Caption="TextFeld" OnClick="LabelClick"> </FormName> Das ist nur ein kleiner auszug. Ich kann noch mehr Komponenten über diese Xml steuern und auch andere ereignisse zuweisen. Im Beispiel habe ich bei OnClick "LabelClick" drinn stehen. Wenn diese Methode in einer bestimmten Klasse nicht existieren sollte, dann sollte ich eine meldung ausgeben. [Edit] Noch baue ich Xml Dateien selber zu fuß zusammen. Wenn der Creator fertig ist, soll das mal der Nutzer des Programms machen können. LG Chris |
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
Du kannst mit TObject.MethodAddress feststellen, ob eine Klasse eine published Methode besitzt.
|
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
Ich denke nicht, mit MethodAdress bekomme ich ja nur den Pointer.
|
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
Eben. :) Den Pointer kannst du auf nil prüfen.
|
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
Zitat:
|
Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
Letztendlich willst du nicht prüfen, ob eine Klasse eine bestimmte Methode enthält, sondern ob
ein Control ein bestimmtes Property hat und falls ja, soll dieses Property gesetzt werden. Kleines Beispiel:
Delphi-Quellcode:
Du solltest eine Zuordnungstabelle führen, bei dem für jedes Property der Datentyp vermerkt ist.
uses TypInfo;
procedure SetControlColor(AControl: TControl; Color: TColor); begin if IsPublishedProp(AControl, 'Color') then SetOrdProp(AControl, 'Color', Color) end; So kann man z.B. die Caption setzen:
Delphi-Quellcode:
SetStrProp(dasObjekt, 'Caption', inhalt_der_Caption);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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