Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Meldungen aus einer Unit an ein Formular senden (https://www.delphipraxis.net/178356-meldungen-aus-einer-unit-ein-formular-senden.html)

DeddyH 19. Apr 2015 09:22

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.

Sigi55 19. Apr 2015 09:43

AW: Meldungen aus einer Unit an ein Formular senden
 
Moin nochmal ...

Zitat:

Zitat von DeddyH (Beitrag 1298380)
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.

Ok, verstanden, aber ich wollt eh nix kaputt machen :-)

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

Sir Rufo 19. Apr 2015 10:09

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.

Sigi55 19. Apr 2015 10:50

AW: Meldungen aus einer Unit an ein Formular senden
 
Moin Sir,

Zitat:

Zitat von Sir Rufo (Beitrag 1298386)
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.

.. also, für mich (NICHT OOPler, Anfang 80er=BASIC, 90er=CLIPPER(dBase), 20Jahre Pause, seit 2 Jahren DELPHI (TopDown Progging [prozedural], so mal als Background :duck:) ist das einfach und verständlich, oder geht's noch einfacher ?

Mir ist wichtig, die festverdrahteten unit2unit Verbindungen aufzulösen ..

Gruß

Sigi

Sir Rufo 19. Apr 2015 11:03

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:
procedure TfrmInput.btnAddClick(Sender: TObject);
begin
  if Assigned(FNewMessageCallback) then
    FNewMessageCallback(Self, edtMessage.Text);
end;
Das macht jetzt exakt das Gleiche ohne eine weitere Instanz da irgendwo noch reinzubasteln.

Sigi55 19. Apr 2015 12:44

AW: Meldungen aus einer Unit an ein Formular senden
 
Moin Sir;

Zitat:

Zitat von Sir Rufo (Beitrag 1298390)
... Das macht jetzt exakt das Gleiche ohne eine weitere Instanz da irgendwo noch reinzubasteln.

Yes, Sir, hab ich getestet, macht es, prima :-) Schlanker ist immer gut :-)


Nur ...
Delphi-Quellcode:
procedure TfrmMitMemo.FormCreate(Sender: TObject);
begin
  TMessageManager.Create; // OK, geht
end;

procedure TfrmMitMemo.FormDestroy(Sender: TObject);
begin
  //TMessageManager.Free; // Fehler ??
end;
Hmm??

Und wie mach ich das z.B. mit der Progressbar ?

Danke und Tschüss

Sigi

Sigi55 19. Apr 2015 17:28

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:
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;
Muss ich dieses Konstrukt immer anwenden wenn ich eine Procedure/Function aus
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 19:05 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz