Einzelnen Beitrag anzeigen

Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Form freigeben <> Memory Leak

  Alt 30. Sep 2005, 09:54
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.
  Mit Zitat antworten Zitat