Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Try-finally und modalresult (https://www.delphipraxis.net/185575-try-finally-und-modalresult.html)

himitsu 23. Jun 2015 17:01

AW: Try-finally und modalresult
 
OnCreate -> OnDestroy
OnShow -> OnClose

Delphi-Quellcode:
F := TMyForm.Create(x);
try

  F.Show;
  F.Close;
  F.Show; // peng
  ...

  F.ShowModal;
  F.ShowModal; // peng
  ...

finally
  F.Free;
end;

DeddyH 23. Jun 2015 17:03

AW: Try-finally und modalresult
 
On -> Off (SCNR^^)

mm1256 23. Jun 2015 22:22

AW: Try-finally und modalresult
 
Zitat:

Zitat von Sir Rufo (Beitrag 1306291)
Was man im
Delphi-Quellcode:
OnCreate
erzeugt und über die Lifetime der Form-Instanz benötigt, sollte man tunlichst im
Delphi-Quellcode:
OnDestroy
aufräumen.

Das leuchtet mir ein. Kann es zukünftig so machen.

Zitat:

Zitat von Sir Rufo (Beitrag 1306291)
Alle anderen Zeitpunkte/Events funktionieren nur unter bestimmten Bedingungen.

Warum (unter welchen Bedingungen) würde denn "OnClose" nicht aufgerufen werden? Es geht hier ja um "modalresult" also modale Fenster. Hierzu verwende ich i.d.R. sowas:

Delphi-Quellcode:
unit Foo

interface

function Foo_ShowModal: integer;

implementation

function Foo_ShowModal: integer;
begin
  with TFoo.Create(Application) do
  try
    Result := ShowModal;
  finally
    Release;
  end;
end;

DeddyH 23. Jun 2015 22:39

AW: Try-finally und modalresult
 
Die Standardaktion im OnClose ist nicht freigeben (caFree), sondern verstecken (caHide). Das bedeutet, dass das Fenster auch nach einem Close weiterlebt, nur eben nicht sichtbar. Wenn man da also etwas freigibt, was man im OnCreate erzeugt hat, fängt man sich einen wilden Zeiger ein, was bei künftigen Zugriffen darauf dann in einer AV endet.

BUG 24. Jun 2015 13:18

AW: Try-finally und modalresult
 
Zitat:

Zitat von mm1256 (Beitrag 1306332)
Es geht hier ja um "modalresult" also modale Fenster.

Es kann ja sein, dass man das Formular nicht erzeugt und gleich wieder zerstört, sondern nur eine Instanz hat und diese wiederverwendet. Ein Beispiel wäre ein Formular als Singleton.

Namenloser 24. Jun 2015 18:46

AW: Try-finally und modalresult
 
Finally wird immer ausgeführt. Sogar das hier funktioniert:

Delphi-Quellcode:
try
  exit;
finally
  ShowMessage('Foobar');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz