Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Freigabe eines verfügbaren Formulars nach Show (https://www.delphipraxis.net/118620-freigabe-eines-verfuegbaren-formulars-nach-show.html)

RaSoWa1 11. Aug 2008 17:48


Freigabe eines verfügbaren Formulars nach Show
 
Hallo erstmal, ich hab da mal einen Frage.

Ich würde gern im nachfolgendem Code Show statt ShowModal verwenden. Wie wird das erzeugte Formular wieder ordnungsgemäß freigegeben?
Reicht es im FormClose-Ereignis des Formulars Action auf caFree zu setzen?
Was passiert wenn das Hauptformular geschlossen wird? Dann wird ja OnClose des untergeordneten nicht aufgerufen?
Delphi-Quellcode:
procedure Suchen(aAlb: TAlbum);
begin
  with TFmDlgSuchen.Create(Application) do
    try
      Alb   := aAlb;
      ShowModal;
//      Show;
    finally
      Free;
      end;
end;
Danke schon mal für eure Hilfe.

Gruß Klaus.

FAlter 11. Aug 2008 18:18

Re: Freigabe eines verfügbaren Formulars nach Show
 
Hi,

nein, der Code gibt es nicht ordnungsgemäß frei. Bei Formularen musst du Delphi-Referenz durchsuchenRelease statt Free verwenden. Dann arbeitet das ganze nämlich noch alle Messages ordentlich ab.

Im OnClose auf caFree zu setzen sollte ausreichen. Bei ShowModal sollte es nicht möglich sein, das Hauptformular zu schließen, während deines offen ist (und selbst wenn doch, das OnClose müsste dann ausgeführt werden). Ansonsten wäre die CloseAction ziemlich sinnlos, wenn deren Nutzung zu eventuellen Speicherlecks führt.

Mfg
FAlter

toms 11. Aug 2008 18:24

Re: Freigabe eines verfügbaren Formulars nach Show
 
[quote="RaSoWa1"]
Was passiert wenn das Hauptformular geschlossen wird? Dann wird ja OnClose des untergeordneten nicht aufgerufen?
[delphi]

Hallo Klaus

Application ist ja der Owner von TFmDlgSuchen. Wenn die Anwendung beendet wird, wird das Application Objekt die Form TFmDlgSuchen freigeben.

RaSoWa1 11. Aug 2008 19:01

Re: Freigabe eines verfügbaren Formulars nach Show
 
Ich Danke euch beiden für die schnelle Antwort.

Wenn ich euch richtig verstanden habe müßte folgender Code ausreichen:
Delphi-Quellcode:
procedure Suchen(aAlb: TAlbum);
begin
  with TFmDlgSuchen.Create(FmAlben.ActiveMDIChild) do begin
    Alb   := aAlb;
    Show;
    end;
end;
Delphi-Quellcode:
procedure TFmDlgSuchen.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
  inherited;
end;
Erste Tests waren erfolgreich.

Gruß Klaus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.

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