Ein klein wenig Offtopic: So einen Multicast kann man sich in Delphi recht easy nachbauen:
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 was ich vor ein paar Jahren mal gebastelt hab (170 KB).