Home Artikel Delphi Artikel Events in Listen verwalten

Events in Listen verwalten

Delphi Artikel

Wie kann man Listen von Events in Delphi verwalten?

 
type
  TEventListener = class( TObject )
  private
    fEvents: Array of TNotifyEvent;
  public
    destructor Destroy; override;
    procedure Notify( Sender: TObject );
    procedure Register( AEvent: TNotifyEvent );
    procedure UnRegister( AEvent: TNotifyEvent );
  end;
 
implementation
 
destructor TEventListener.Destroy;
begin
  fEvents := nil;
  inherited;
end;
 
procedure TEventListener.Notify( Sender: TObject );
var
  i: integer;
begin
  for i:=0 to High(fEvents) do
    if Assigned( fEvents[i] )
      then fEvents[i](Sender);
end;
 
procedure TEventListener.Register( AEvent: TNotifyEvent );
var
  i, max: integer;
begin
  if not Assigned( AEvent )
    then Exit;
  max := High(fEvents);
  for i:=0 to max do
    if (TMethod(fEvents[i]).Code = TMethod(AEvent).Code) and
       (TMethod(fEvents[i]).Data = TMethod(AEvent).Data)
      then Exit; // Ereignis-Methode bereits registriert   
  Inc( max );
  SetLength( fEvents, max+1 );
  fEvents[max] := AEvent;
end;
 
procedure TEventListener.UnRegister( AEvent: TNotifyEvent );
var   
  i, max: integer;
begin
  if not Assigned( AEvent )
    then Exit;
  max := High(fEvents);
  for i:=0 to max do
    if (TMethod(fEvents[i]).Code = TMethod(AEvent).Code) and
       (TMethod(fEvents[i]).Data = TMethod(AEvent).Data)
    then begin
      fEvents[i] := nil;
      Dec(max);
      if (i <= max)
        then System.Move(fEvents[i + 1], fEvents[i],
             (max - i + 1) * SizeOf(TNotifyEvent));
      SetLength( fEvents, max+1 );
      Exit;
    end;
end;
 

Das ganze lässt sich bequem in andere Klassen einbinden ...

property OnChange: TEventListener read FOnChange;
... und ist in vielen Fällen ausreichend, d.h. TNotifyEvent genügt meistens.
Bei Bedarf können weitere Parameter auch mit dem Sender-Objekt übergeben werden.

RidNacs bei Chip Online
RidNacs wurde im Downloadbereich von Chip Online aufgenommen.
Weiterlesen...
 
Softpedia zertifiziert RidNacs
RidNacs 2.0 wurde von Softpedia als 100% CLEAN zertifiziert
Weiterlesen...
 
RidNacs 2.0 verfügbar
Ziemlich genau ein Jahr nach Veröffentlichung von RidNacs 1.0 ist nun die Version 2.0 fertig.
Weiterlesen...
 
20.000 RidNacs Downloads
Seit der Veröffentlichung wurde RidNacs mehr als 20.000 mal von splashsoft.de heruntergeladen.
 
RidNacs 1.0.2 veröffentlicht
Diese Version behebt einige kleine Fehler in der Vorgängerversion.
 
© 2010 Stephan Plath - Impressum