Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Meldungen aus einer Unit an ein Formular senden

  Alt 18. Apr 2015, 22:42
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat