Delphi: Több feliratkozó egy eseményre

http://delphi.about.com/library/weekly/aa051005a.htm


{-------------------------------------------------------------------------------------------------------------------------------
 Unit Name: uSettings
 Author:    Ádám Péter
 Date:      2014.09.27.
 Purpose:   Dentist XE Settings saját beállításainak kezelése
 History:   http://delphi.about.com/library/weekly/aa051005a.htm
-------------------------------------------------------------------------------------------------------------------------------}

unit uSettings;

interface

uses
  Windows,SysUtils,Classes
  ;

type
  TAppDataChanged = TNotifyEvent;
  PMethod = ^TMethod;
  TAppData=class
  private
    FEvents   : TList;
  protected
    procedure Notify;
  public
    constructor Create;
    destructor  Destroy;override;
    procedure AddEventHandler(const Value : TAppDataChanged);
    procedure DelEventHandler(const Value : TAppDataChanged);
  end;

implementation

{ TAppData }

procedure TAppData.AddEventHandler(const Value: TAppDataChanged);
var
  LMethod : PMethod;
begin
  {Eseménykezelő hozzáadása}
  LMethod:=New(PMethod);
  LMethod^.Code:=TMethod(Value).Code;
  LMethod^.Data:=TMethod(Value).Data;
  FEvents.Add(LMethod);
end;

constructor TAppData.Create;
begin
  {Create}
  FEvents:=TList.Create;
end;

procedure TAppData.DelEventHandler(const Value: TAppDataChanged);
var
  i : integer;
begin
  {Eseménykezelő törlése}
  for i:=0 to FEvents.Count-1 do begin
    if TMethod(FEvents[i]^).Code=TMethod(Value).Code then begin
      if TMethod(FEvents[i]^).Data=TMethod(Value).Data then begin
        Dispose(FEvents[i]);
        FEvents.Delete(i);
        break;
      end;
    end;
  end;
end;

destructor TAppData.Destroy;
var
  i : integer;
begin
  {Destruktor}
  for i:=0 to FEvents.Count-1 do begin
    Dispose(FEvents[i]);
  end;
  FEvents.Free;
  inherited;
end;

procedure TAppData.Notify;
var
  i : integer;
begin
  {Értesítés}
  for i:=0 to FEvents.Count-1 do begin
    TNotifyEvent(FEvents[i]^)(Self);
  end;
end;

end.

Reklámok

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés /  Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés /  Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés /  Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés /  Módosítás )

w

Kapcsolódás: %s