TEventMultiplexer<TEvent> = record
Events: array of TEvent;
class operator implicit(AnEvent: TEvent): TEventMultiplexer<TEvent>;
class operator explicit(AMultiplexer: TEventMultiplexer<TEvent>): TEvent;
class operator add(AMultiplexer: TEventMultiplexer<TEvent>; AnEvent: TEvent): TEventMultiplexer<TEvent>;
class operator subtract(AMultiplexer: TEventMultiplexer<TEvent>; AnEvent: TEvent): TEventMultiplexer<TEvent>;
end;
TSomeClass = class
private
FOnSome: TEventMultiplexer<TOnSomeEvent>;
public
procedure Test(AIndex: integer; AText: string);
property OnSome: TEventMultiplexer<TOnSomeEvent> read FOnSome write FOnSome;
end;
...
FTestClass.OnSome := Test1;
FTestClass.OnSome := FTestClass.OnSome + Test2;
...
procedure TSomeClass.Test(AIndex: integer; AText: string);
var
t: TOnSomeEvent;
begin
for t in FOnSome.Events do begin
t(AIndex, AText);
end;
end;