Hi,
Habe gerade folgenden Quelltext vorliegen (vereinfacht):
Delphi-Quellcode:
program EinProgram;
uses EineUnit;
begin
EineForm := TEineForm.Create(Application);
try
EineForm.ShowModal;
finally
if EineForm <>
nil then
FreeAndNil(EineForm);
end;
end.
//// Die Unit mit der Form
unit EineUnit;
interface
type
TEineForm=
class(TForm)
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
EineForm: TEineForm;
implementation
procedure TEineForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
end.
Meine Logik sagt mir: "Das wird krachen!". Denn beim Schließen der Form wird diese freigegeben und im finally-block des Hauptprogramms wird auch immer freigegeben, weil beim freigeben ja nicht genilt wird und der Vergleich deswegen immer true ergibt.
In der Praxis läuft dieser Code aber wunderbar. Ich musste feststellen, dass ich z.B. im finally-block vor dem FreeAndNil noch auf EineForm.Caption sowohl lesend als auch schreiben zugreifen kann.
Meine Frage:
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."