AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Multicast Events

Ein Thema von Stevie · begonnen am 22. Feb 2011 · letzter Beitrag vom 26. Aug 2021
 
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Multicast Events

  Alt 23. Feb 2011, 11:16
Man bekommt den Owner und die Methode zusammen übergeben?

Delphi-Quellcode:
constuctor TEventHandler<T>.Create(OwnerMethod: T; AddEvents: array of T);
begin
  inherited Create(TComponent(TMethod(OwnerMethod).Data)); // Owner
  for M in AddEvents do
    Add(M);
end;
statt
Delphi-Quellcode:
eventHandler := TEventHandler<TNotifyEvent>.Create(Button1);
eventHandler.Add(ClickHandler1);
eventHandler.Add(ClickHandler2);
Button1.OnClick := eventHandler.Invoke;
einfach
Delphi-Quellcode:
eventHandler := TEventHandler<TNotifyEvent>.Create(Button1.OnClick);
eventHandler.Add(ClickHandler1);
eventHandler.Add(ClickHandler2);
oder gar so
TEventHandler<TNotifyEvent>.Create(Button1.OnClick, [ClickHandler1, ClickHandler2]); .

In dem TMethod (Button1.OnClick) steckt ja schon alles drin > die aufzurufende Methode und das Objekt, welches man als Owner verwenden kann.

Ja, ich geb's zu ... ich bin ein schreibfauler Programmierer , aber ich steh dazu
Mich würde es ehrlich gesagt sehr wundern, wenn das funktioniert...

Wenn ich so einen TEventHandler erzeuge, so möchte ich den doch einem Event zuweisen, welches bisher noch kein Event zugewiesen hat, also bei dem folgendes zutrifft:

Delphi-Quellcode:
TMethod(OnClick).Code = Nil
TMethod(OnClick).Data = Nil
Selbst wenn jedoch bereits ein Event an mein OnClick zugewiesen ist, enthält TMethod(OnClick).Data jedoch eine Referenz auf das Objekt, dem der Eventhandler gehört, nicht jedoch zu dem Objekt, welches die Eventeigenschaft hat...

Im Code:

Delphi-Quellcode:
Button1.OnClick := Form1.HandleOnClick;

Assert(TMethod(Button1.OnClick).Data = Button1); // schlägt fehl
Assert(TMethod(Button1.OnClick).Data = Form1); // erfolgreich
Wenn ich nicht die ganzen letzten Jahre das Konzept von TMethod missverstanden hab, dann kann deine Unterstützung der Schreibfaulheit nicht funktionieren.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  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 03:22 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