Zitat von
mumu:
also ich rufe aus Form1 heraus z.b. bei nem button click folgendes auf:
Delphi-Quellcode:
Procedure TForm1.ButtonClick(Sender: TObject);
var Form2: TTestForm;
Begin
Form2 := TTestForm.Create(Self);
try
Form2.Show;
...
Form2.StartProcedure;
...
finally
FreeAndNil(Form2);
end;
end;
so, wenn jetzt in Form2 die StartProcedure beendet wurde, dann möchte ich gerne, dass das Formular jedoch noch geöffnet bleibt und erst durch einen user click beendet wird. da jedoch anschließend die zeile FreeAndNil(Form2) aufgerufen wird, terminiert sich Form2 ohne user einwirkung. soll ich jetzt das FreeAndNil rausnehmen? oder wie soll ich das sonst lösen? und entstehen durch das herausnehmen von freeandnil nicht speicherlöcher?!
Für modale-Dialog pass folgende Vorlage:
Delphi-Quellcode:
Form := TMyForm.Create(self);
try
Form.ShowModal;
finally
Form.Free;
end;
Für nicht-modal angezeigte Formulare passt dies nicht:
Delphi-Quellcode:
Form := TMyForm.Create(self);
Form.Show;
Und die freigabe erfolgt i.d.R. im OnClose-Ereignis.
Eine Freigabe mittels Free ist gefährlich, da hier evtl. noch nicht alle Messages in der message-Schleife abgearbeitet sind. Form.Release sorgt dafür das alle vor der freigabe abgearbeitet werden.
Windows Vista - Eine neue Erfahrung in Fehlern.