Testprogramm für das  TNotifyEvent mit Delphi

Der Code wurde mit Delphi XE 3 erstellt, sollte aber mit allen XE-Versionen funktionieren. Für Delphi 5-7 müsste der Abschnitt
uses angepasst werden, sollte aber auch kein Problem darstellen. Anhand der Funktionen und Kommentare wird deutlich,
wie das  TNotifyEvent verwendet werden kann und funktioniert. Praktisch lassen sich damit alle Ereignisse behandeln und umleiten.

Erstellen Sie ein neues Projekt mit Datei - Neu - VCL-Formularanwendung
und ersetzen Sie den Inhalt der Unit1 mit dem nachfolgenden Code.

// Programm zum Testen des TNotifyEvent
// Erstellt mit Delphi XE 3

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TKlasse_A = class
  private
    FHierPassiertWasTNotE: TNotifyEvent;
  public
    function BerechneWas(X, Y: Integer): Integer;
    property HierPassiertWasTNotE: TNotifyEvent read FHierPassiertWasTNotE write FHierPassiertWasTNotE;
  end;

  TKlasse_B = class
  private
    procedure RufMichAuf(Sender: TObject);
  public
    procedure Starten;
  end;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    ButtonRUN: TButton;
    ButtonClear: TButton;
    Timer1: TTimer;
    procedure ButtonRUNClick(Sender: TObject);
    procedure MussWasWissen;
    procedure ButtonClearClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  KlasseA: TKlasse_A;
  KlasseB: TKlasse_B;
implementation

{$R *.dfm}
function TKlasse_A.BerechneWas(X, Y: Integer): Integer;
begin
Result := -1;
// Ereignis auslösen, falls eine Methode zugewiesen wurde
if Assigned(HierPassiertWasTNotE) then  HierPassiertWasTNotE(Self);
Form1.Memo1.Lines.Add('After if Assigned(BeiAddition) then  BeiAddition(Self);');

Result := X + Y;
end;

procedure TKlasse_B.RufMichAuf(Sender: TObject);
begin
Form1.Memo1.Lines.Add('********** Hallo, ich aus KlasseB weiß das in Klasse_A.BerechneWas gleich X mit Y addiert wird *************')
end;

procedure TKlasse_B.Starten;
begin
KlasseA.HierPassiertWasTNotE := RufMichAuf;
end;

procedure TForm1.MussWasWissen;
var Ergebnis: integer;
begin
Ergebnis := KlasseA.BerechneWas(99, 101);
Form1.Memo1.Lines.Add('Berechnung Ergebnis von 99 + 101 = ' + inttostr(Ergebnis) );
end;


procedure TForm1.ButtonClearClick(Sender: TObject);
begin
Memo1.Clear;
end;

procedure TForm1.ButtonRUNClick(Sender: TObject);
begin
KlasseB.Starten;
Form1.ButtonRUN.Enabled := false;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.MussWasWissen;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
KlasseA := TKlasse_A.Create;
KlasseB := TKlasse_B.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
KlasseA.Free;
KlasseB.Free;
end;

end.