Nachtrag:
Beim Unregister wird die Reihenfolge der Event-Registrierungen durcheinandergebracht, indem das letzte Event in der Liste die Lücke ersetzt und dann das Array verkürzt wird.
Ist die Reihenfolge wichtig, so müssen alle Events nach der Lücke nach vorne gezogen werden:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// unregister event from distributor
////////////////////////////////////////////////////////////////////////////////
procedure TFrmEventTest.UnregisterEvent(Subscriber: TObject);
var
i: integer;
found: boolean;
begin
found := false;
for i := 0 to Length(m_events) - 1 do
begin
if not found then
begin
found := TMethod(m_events[i]).Data = Subscriber;
end
else
begin
m_events[i-1] := m_events[i];
end;
end;
if found then
begin
SetLength(m_events, Length(m_events) - 1);
end;
end;