![]() |
AW: Meldungen aus einer Unit an ein Formular senden
Das mit dem Dangling Pointer bedeutet, dass wir bei dieser Vorgehensweise ja 2 Verweise auf dieselbe Instanz haben. Wird das Formular, das diese anlegt, zerstört, gibt es sie wieder frei, somit zeigt der Verweis in der sendensen Klasse dann ins Leere.
|
AW: Meldungen aus einer Unit an ein Formular senden
Moin nochmal ...
Zitat:
Und mit der Progressbar ? Ich hab mir überlegt, ich könnte das ja so machen wie bei z.B. einer Stringliste mit "name" and "value" ('Hans=12'), also quasi als Parameter übergeben und dann in der Hauptform ausgeben oder auch ignorieren, oder ist das blö.. ? Gruß Sigi |
AW: Meldungen aus einer Unit an ein Formular senden
Eigentlich bringt doch diese MessageManager-Klasse keinen Vorteil gegenüber dem einfachen Zuweisen eines Callbacks/einer Event-Methode. Gut es fügt noch ein wenig mehr Code hinzu - macht es also aufwendiger/komplizierter ohne einen wirklichen Mehrwert zu schaffen.
|
AW: Meldungen aus einer Unit an ein Formular senden
Moin Sir,
Zitat:
Mir ist wichtig, die festverdrahteten unit2unit Verbindungen aufzulösen .. Gruß Sigi |
AW: Meldungen aus einer Unit an ein Formular senden
Nehmen wir mal das Beispiel von oben und designen das mal ohne den MessageManager:
Delphi-Quellcode:
type
TfrmMitMemo = class(TForm) mmoMessages: TMemo; btnShowInput: TButton; procedure btnShowInputClick(Sender: TObject); private { Private-Deklarationen } procedure AddMessage(Sender: TObject; const NewMsg: string); public { Public-Deklarationen } end; ... procedure TfrmMitMemo.AddMessage(Sender: TObject; const NewMsg: string); begin mmoMessages.Lines.Add(NewMsg); end;
Delphi-Quellcode:
type
TfrmInput = class(TForm) edtMessage: TEdit; btnAdd: TButton; procedure btnAddClick(Sender: TObject); private { Private-Deklarationen } FNewMessageCallback: TNewMessageEvent; public { Public-Deklarationen } property NewMessageCallback: TNewMessageEvent read FNewMessageCallback write FNewMessageCallback; end;
Delphi-Quellcode:
procedure TfrmMitMemo.btnShowInputClick(Sender: TObject);
begin frmInput.NewMessageCallback := AddMessage; frmInput.Show; end;
Delphi-Quellcode:
Das macht jetzt exakt das Gleiche ohne eine weitere Instanz da irgendwo noch reinzubasteln.
procedure TfrmInput.btnAddClick(Sender: TObject);
begin if Assigned(FNewMessageCallback) then FNewMessageCallback(Self, edtMessage.Text); end; |
AW: Meldungen aus einer Unit an ein Formular senden
Moin Sir;
Zitat:
Nur ...
Delphi-Quellcode:
Hmm??
procedure TfrmMitMemo.FormCreate(Sender: TObject);
begin TMessageManager.Create; // OK, geht end; procedure TfrmMitMemo.FormDestroy(Sender: TObject); begin //TMessageManager.Free; // Fehler ?? end; Und wie mach ich das z.B. mit der Progressbar ? Danke und Tschüss Sigi |
AW: Meldungen aus einer Unit an ein Formular senden
Hi,
also, habs nach längerem Hinsehen und vergleichen und try & error selbst rausgefunden :duck: : Ich muss nix 'createn', also auch nix zerstören :-) Hat sich erledigt, Danke. Was mir noch durch den Kopf geht, ist:
Delphi-Quellcode:
Muss ich dieses Konstrukt immer anwenden wenn ich eine Procedure/Function aus
procedure TfrmMitMemo.Button3Click(Sender: TObject);
var Generator: TMessageGenerator; s : string; begin s := 'test2'; Generator := TMessageGenerator.Create; try Generator.NewMessageCallback := AddMessage; Generator.OutPut(s); finally Generator.Free; end; end; einer formlosen unit aufrufe, oder kann man das vereinfachen ?? Vielen Dank für eure Nachhilfe :-) Gruß Sigi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz