Hilft Dir dieses Beispiel weiter? Die Klasse TMsgManager steht in einer eigenen
Unit und ist unverändert, das Formular hat wieder ein Memo, erzeugt eine Instanz des Managers und weist ihr den EventHandler zu, innerhalb dessen ins Memo geschrieben wird, alles genau wie oben gezeigt. Neu ist die 2.
Unit, die kein Formular besitzt, sondern nur eine Klasse deklariert.
Delphi-Quellcode:
unit MessageSend;
interface
uses SysUtils, MsgManager;
type
TMessageGenerator =
class
private
FManager: TMessageManager;
public
procedure CountTo1000;
property Manager: TMessageManager
read FManager
write FManager;
end;
implementation
{ TMessageGenerator }
procedure TMessageGenerator.CountTo1000;
var
Number: integer;
begin
for Number := 1
to 1000
do
if Number
mod 10 = 0
then
if Assigned(Manager)
then
Manager.AddMessage(IntToStr(Number));
end;
end.
Der ButtonClick des Formulars sieht dann so aus:
Delphi-Quellcode:
procedure TfrmMitMemo.Button1Click(Sender: TObject);
var
Generator: TMessageGenerator;
begin
Generator := TMessageGenerator.Create;
try
Generator.Manager := FManager;
Generator.CountTo1000;
finally
Generator.Free;
end;
end;
Gedacht habe ich mir das Ganze letztes Jahr so: der "Konsument" der Nachrichten erzeugt den Manager und weist ihm einen OnNewMessage-Handler zu. Die benachrichtigende Klasse besitzt eine Property vom Typ des Managers, erstellt aber keine eigene Instanz, sondern bekommt diese vom Konsumenten zugewiesen. Sobald sie etwas mitzuteilen hat, ruft sie einfach die AddMessage-Methode ihres zugewiesenen Managers (so vorhanden) auf.