Hi zusammen
Diese Diese Instanz gibt sich selbst frei, wenn im das Action im Onclose auf caFree steht.
Das stimmt so nicht. Der Parameter Action steuert lediglich, was geschehen soll. Wird ihm caFree zugewiesen, wird das Formular tatsächlich
geschlossen
Nach wie vor: ein Formular, das sich selbst freigeben soll, muss mit Release geschlossen werden.
Ein Beispiel:
Delphi-Quellcode:
var TForm1;
implementation;
...
...
procedure TForm1.ButtonClose.Onclick(Sender:TObject);
begin
Form1.Close;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
//Action := caHide;
end;
Hier klickt der Anwender auf den Button, der sich in Form1 befindet. Dadurch wird OnClose aufgerufen; die Programmausführung arbeitet also FormOnClose ab und tut das, was der Parameter
Action vorsieht. In diesem Fall wird das Formular freigegeben (es könnte auch nur versteckt (etc) werden).
Nachdem FormClose abgearbeitet ist, kehrt die Programmmausführung zur aufrufenden Prozedur zurück - aber Scheibenkleister, die ist ja gar nicht mehr da!! Also was macht Delphi! Eine
AV auslösen?
Mit
Form1.Release kann dies verhindert werden.
Hier solltest du dir die Warnung zu Herzen nehmen
Ein modales Formular kann, muss aber nicht mit Release freigegeben werden, da sich die Behandlungsroutine nicht im modalen Formular befindet.
Gruss
Delbor