Einzelnen Beitrag anzeigen

Benutzerbild von Shivan
Shivan

Registriert seit: 5. Mär 2003
Ort: Ravensburg
131 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Ergänzung zu "Events in einer Liste"

  Alt 27. Mär 2007, 22:18
Zitat von igel457:
Was du vorschlägst geht aus einem ganz einfachen Grund nicht: TMyEvent oder auch TNotifyEvent ist ein Record des Typs TMethod und keine Klasse.
Dann wäre ein Schritt, alle TMyEvent's durch TMethod zu ersetzen. Jedoch ob dann die Übergabe der jeweiligen Methoden so klappt? Wahrscheinlich noch hart als TMethod casten im "Add". Werd ich morgen mal probieren. Weil hab eben den Fall, dass ich ein Eventhandling nicht mit Hilfe einer Eventchain lösen möchte, da ich nur an manchen Stellen auf das Event reagieren möchte und mit der klassischen Eventchain beim Entfernen in falscher Reihenfolge ein Problem entstehen wird...

Ich meinte, bei .net oder java oder so gibts doch schon so Eventhandler? Oder lieg ich da falsch... deswegen wollte ich sowas nun auch in Delphi mal verwenden, weil die Idee des Eventhandlers im Gegensatz zur Eventchain eben doch einiges besser ist

Zitat von Der_Unwissende:
...kann man das ganze auch mit Interfaces oder Abstrakten Klassen realisieren. Hier würdest Du dann eben ein Interface oder ein Objekt übergeben (also den Verweis darauf), statt den Zeiger auf eine Methode.
Dennoch müsste ich dort ja ein Property TMethod übergeben, um es verwenden zu können. Oder für jeden Event-Typ eine eigene kleine Klasse, die dann den Aufruf des Ereignisses implementiert, erstellen. Oder hab ich da was falsch verstanden?

Zitat von Der_Unwissende:
Alternativ kannst Du auch noch ein Array of Const als Argument der Methode angeben. Damit wäre es dann möglich, dass Du beliebige Argumente übergibst (müssten Variante Typen sein), allerdings dürfte es das Prüfen auf Korrektheit doch etwas erschweren.
Damit ließen sich dann aber die aktuellen Eventhandler-Methoden nicht so einfach in dem Eventhandler registrieren sondern müssten groß überarbeitet werden.... zumindest hört sich das so an


Mein Ziel war eigentlich sozusagen bspw. ich hab ein TNotifyEvent oder sonstige Events wovon Prozeduren implementiert wurden die im Moment 1:1 auf das Ereignis der jeweiligen Klasse (OnXY) gesetzt werden können... und dort eben statt 1:1 --> 1:n anzulegen
Delphi-Quellcode:
procedure myClass.OnBlubKlick(Sender: TObject);
begin
   //blabla
end;

procedure myClass.OnDingsKlick(Sender: TObject);
begin
  //nochmalwas
end;

procedure myClass.RegisterEventHandlerProcedures;
begin
  m_EventHandler.Register(OnDingsKlick);
  m_EventHandler.Register(OnBlubKlick);
end;

procedure myClass.InvokeEventhandler;
var
  i: Integer;
begin
  for i := 0 to m_EventHandler.Count - 1 do
    TNotifyEvent(m_EventHandler.Items[i])(self);
end;
So in der Art dachte ich mir das von der Anwendung her...

Im Moment denk ich, dass die einzige Lösung wirklich mit TMethod sein dürfte...
TMethod ist ein record mit 2 Eigenschaften Data und Code - richtig?

Naja morgen früh gehts weiter mit TMethod-Versuchen.
Markus Stein