Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfen, ob eine Klasse eine bestimmte Methode enthält (https://www.delphipraxis.net/110399-pruefen-ob-eine-klasse-eine-bestimmte-methode-enthaelt.html)

Christian18 17. Mär 2008 16:34


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:
if FindMethod(ClassName, MethodName) then
  begin
    // Ja
  end
else
  begin
    // Nein
  end;


function FindMethod(ClassName: TClass; MethodName: TMethod) : Boolean;
begin
  // ???
end;
MFG Christian18

Apollonius 17. Mär 2008 16:37

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).

Bernhard Geyer 17. Mär 2008 16:39

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?

Dezipaitor 17. Mär 2008 16:45

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.

Christian18 17. Mär 2008 16:46

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

Apollonius 17. Mär 2008 16:48

Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
 
Du kannst mit TObject.MethodAddress feststellen, ob eine Klasse eine published Methode besitzt.

Christian18 17. Mär 2008 16:52

Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
 
Ich denke nicht, mit MethodAdress bekomme ich ja nur den Pointer.

Apollonius 17. Mär 2008 16:53

Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
 
Eben. :) Den Pointer kannst du auf nil prüfen.

Bernhard Geyer 17. Mär 2008 16:54

Re: Prüfen, ob eine Klasse eine bestimmte Methode enthält
 
Zitat:

Zitat von Christian18
Ich denke nicht, mit MethodAdress bekomme ich ja nur den Pointer.

Und wenn dieser nil ist dann hat wohl die Klasse keine entsprechende Methode :-)

shmia 17. Mär 2008 17:06

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:
uses TypInfo;
procedure SetControlColor(AControl: TControl; Color: TColor);
begin
   if IsPublishedProp(AControl, 'Color') then
      SetOrdProp(AControl, 'Color', Color)
end;
Du solltest eine Zuordnungstabelle führen, bei dem für jedes Property der Datentyp vermerkt ist.
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.
Seite 1 von 3  1 23      

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