AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Pointer auf Methode (einer Klasse) mit unbekannter Signatur
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer auf Methode (einer Klasse) mit unbekannter Signatur

Ein Thema von s.h.a.r.k · begonnen am 31. Dez 2009 · letzter Beitrag vom 2. Jan 2010
 
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Pointer auf Methode (einer Klasse) mit unbekannter Signatur

  Alt 31. Dez 2009, 16:54
Edit:
Bitte weiter unten die aktualiserte Frage lesen

Hallo zusammen,

und zwar bastle ich gerade an daran, den EventListener-Mechanismus, welcher z.B. aus Java oder Flash bekannt ist, nachzubauen. Mir schwebt der folgende Code vor:
Delphi-Quellcode:
{ Definierte Events }
type TEventType = (evtClick, evtError);

{ Methoden, die später durch die Events aufgerufen werden }
procedure OnClickA(Sender: TObject); begin { ... } end;
procedure OnClickB(Sender: TObject); begin { ... } end;
procedure OnErrorA(const AError: String); begin { ... } end;
procedure OnErrorB(const AError: String); begin { ... } end;

{ Events verknüpfen }
blub.AddEventLister(evtClick, OnClickA);
blub.AddEventLister(evtClick, OnClickB);
blub.AddEventLister(evtClick, OnErrorA);
blub.AddEventLister(evtClick, OnErrorB);

{ AddEventListener-Methode soll einen Pointer auf die entsprechende
  aufzurufende Methode in eine passende Liste übernehmen }

procedure TBlub.AddEventListener(const AType: TEventType; AListener: TMethod);
begin
  // In passender Liste Referenz auf Methode einfügen
  FMethodPointerList[AType].Add(@AListener);

  { Hier noch die Definition von FMethodPointerList:
    FMethodPointerList : array[ low(TEventType) .. high(TEventType) ] of TList; }

end;
Nun habe ich das Problem, dass der Compiler mir einen Fehler bringt, wenn ich eine Methode als Listener anmelden will, alsi bei der Ausführung des folgenden Codes:
blub.AddEventLister(evtClick, OnClickA); Mir ist klar, dass ich eigentlich den Fehler posten sollte, aber mir geht es primär eher um etwas anderes: ich will ja nur einen Zeiger auf die Methode übergeben, dabei interessiert mich nicht wie viele Parameter die Methode hat. Dies wird später entsprechend ausgewertet, von Methoden die die Definition kennen. Habt ihr eine Ahnung, ob das überhaupt möglich ist? Wenn ja, wie kann ich denn sowas anstellen?

Hier nochmals das Problem in Kurzform, was ich haben will:
Delphi-Quellcode:
procedure A(AVar: String); begin { ... } end;
procedure B(const ATemp: Integer): begin { ... } end;
procedure C(AMuh: TKuh); begin { ... } end;

procedure SaveMethodePointer(AMethodPointer: TMethodPointer); // TMethodPointer -> Welchen Typ sollte ich hier nutzen?
begin
  FPointerList.Add(AMethodPointer);
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
 


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 04:51 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 by Thomas Breitkreuz