AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Prüfen, ob eine Klasse eine bestimmte Methode enthält
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Christian18 · begonnen am 17. Mär 2008 · letzter Beitrag vom 18. Mär 2008
Antwort Antwort
Seite 1 von 3  1 23      
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

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

  Alt 17. Mär 2008, 17:34
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 17. Mär 2008, 17:37
Das geht nur, wenn die Methode published ist und du nicht den Klassennamen, sondern die Klasse selbst hast oder die Klasse registriert ist (RegisterClass).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 17. Mär 2008, 17:39
Stichwort ist RTTI welche nur bei published-Elementen in ausreichender Form zur verfügung stehen.
Wieso benötigst du sowas?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

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

  Alt 17. Mär 2008, 17:45
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#5

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

  Alt 17. Mär 2008, 17:46
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 17. Mär 2008, 17:48
Du kannst mit TObject.MethodAddress feststellen, ob eine Klasse eine published Methode besitzt.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#7

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

  Alt 17. Mär 2008, 17:52
Ich denke nicht, mit MethodAdress bekomme ich ja nur den Pointer.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 17. Mär 2008, 17:53
Eben. Den Pointer kannst du auf nil prüfen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#9

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

  Alt 17. Mär 2008, 17:54
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

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

  Alt 17. Mär 2008, 18:06
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:
  SetStrProp(dasObjekt, 'Caption', inhalt_der_Caption);
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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