AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Sonstiges Delphi Multicast in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Multicast in Delphi

Ein Thema von Matze · begonnen am 26. Sep 2006 · letzter Beitrag vom 20. Aug 2007
 
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Multicast in Delphi

  Alt 26. Sep 2006, 15:46
In .NET ist es möglich, einem Event mehrere Eventhandler zuzuordnen. Mit folgendem Code, der aus diesem Thread stammt, zeigt Phoenix wie dies auch unter Delphi (Win32) möglich ist.

Delphi-Quellcode:
private
      m_events: array of TNotifyEvent;
public
      procedure RegisterEvent(event: TNotifyEvent);
      procedure UnregisterEvent(Subscriber: TObject);

...

////////////////////////////////////////////////////////////////////////////////
// register event to distributor
////////////////////////////////////////////////////////////////////////////////

procedure TFrmEventTest.RegisterEvent(Event: TNotifyEvent);
begin
   SetLength( m_events, Length(m_events) + 1 );
   m_events[ Length(m_events) - 1 ] := Event;
end;

////////////////////////////////////////////////////////////////////////////////
// unregister event from distributor
////////////////////////////////////////////////////////////////////////////////

procedure TFrmEventTest.UnregisterEvent(Subscriber: TObject);
var
   i: integer;
begin
   for i := 0 to Length(m_events) - 1 do
   begin
      if TMethod(m_events[i]).Data = Subscriber then
      begin
         m_events[i] := m_events[Length(m_events) - 1];
         SetLength(m_events, Length(m_events) - 1);
      end;
   end;
end;


////////////////////////////////////////////////////////////////////////////////
// distribute the event
////////////////////////////////////////////////////////////////////////////////

procedure TFrmEventTest.btnEventClick(Sender: TObject);
var
   i: integer;
begin
   for i := 0 to Length(m_events) - 1 do
      m_events[i](Sender);
end;
Man beachte dass ein Objekt mehrere Events registrieren kann und dann auch mehrfach benachrichtigt wird. Ein unregister hebt nur die erste Registrierung wieder auf, die anderen bleiben unberührt.

Im Anhang ein kleines D5-Beispiel, das Phoenix vor ein paar Jahren gebastelt hat (170 KB).
Angehängte Dateien
Dateityp: zip event_distributor_192.zip (169,3 KB, 48x aufgerufen)
  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 09: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-2025 by Thomas Breitkreuz