@omata: Laut Hilfe stimmt dies zum teil. Angenommen folgende Situtation ist gegeben
Delphi-Quellcode:
procedure TForm1.DoSomeThing;
begin
ShowMessage('Hallo');
//Free or Release?
Caption := 'Test';
end;
In diesem Fall muss man Release verwenden da das Form frühestens nach Beendigung de Procedure zerstört werden soll. Würde man Free nehmen gäbe es dann bei "Caption := ..." eine
AV.
Für den Rest dürfte es allerdings keine Rolle spielen.
Natürlich könnte jetzt das Argument kommen das bei Release noch Messages abgearbeitet werden. Aber wer/was verhindert das nach Release noch eine Message an das Programm geschickt wird bevor die Message von Release abgearbeitet wird. Niemand/Nichts und somit wäre man wieder am Anfang - nämlich das nicht alle Nachrichten abgearbeitet sind.
Der Vorteil von Release ist einfach nur der das, das Form erst freigegeben wird wenn die Message abgearbeitet ist welche von Release gesendet wird. Wenn allerdings folgende Situtation gegeben ist
Delphi-Quellcode:
procedure TForm1.DoSomeThing;
begin
ShowMessage('Hallo');
//Free or Release?
Application.ProcessMessage;
Caption := 'Test';
end;
so spielt es keine Rolle ob man Release oder Free nimmt, denn durch das "Application.ProcessMessages" wird die Message zum freigeben des Formulars auch abgearbeitet bevor das Ende der Procedure erreicht wird und eine
AV sollte ebenfalls damit auftreten.
Kurz und Knapp. Wenn man weiß das, das Form und dessen unterkomponenten gerade nichts abarbeiten kann man auch free nutzen, und das sollte hier auch der Fall sein, denn die Anweisung wird ja erst ausgeführt wenn ShowModal zurück gekehrt ist, und dies setzt ja auch vorraus das die wm_close-Nachricht abgeabeitet wurde und somit ist ausgeschlossen das sich die Anwendung gerade in einer Procedure befindet.