Frage1: Wie kann ich aus einem Event heraus ein Fenster freigeben? Geht das nur mit Close ?
Ich hab' schon oft gelesen, dass das mit Free und Abort oder aber mit Release gehen soll, aber bei mir klappt das nicht. Ich dachte immer CM_RELEASE und RELEASE und caFREE sind absolut identisch, aber wenn ich RELEASE benutze dann schließt sich zwar optisch das Fenster (ShowModal), aber ich kann das aufrufende Fenster danach nicht mehr aktivieren oder einen Button klicken. Wenn ich aber caFREE benutze dann klappt das problemlos. Kann also nicht das Gleiche sein...
Ein Programm beenden ohne Close ist ja sehr einfach: siehe Button2Click...
Gibt es einen Befehl für "Fenster schließen und sofort aus dem Speicher werfen und dabei nicht OnCloseQuery und OnClose beachten" ?
Natürlich muß man das so nicht machen, Close funzt ja sehr gut, aber ich dachte es geht zumindest irgendwie.
EDIT: bei MyForm.Show funzt Release sehr gut...
Folgendes Beispiel:
Code: Alles auswählen
Procedure TForm1.Button1Click(Sender: TObject);
Var
MyForm: TForm;
Begin
Try
MyForm := TForm.Create(Nil);
MyForm.Height := 500;
MyForm.Width := 500;
MyForm.Color := clBlue;
MyForm.KeyPreview := True;
MyForm.OnKeyPress := @MyKey;
MyForm.OnClose := @MyClose;
//MyForm.Parent := Form1;
MyForm.ShowModal;
Finally
MyForm.Free;
End;
End;
Procedure TForm1.Button2Click(Sender: TObject);
Begin
Form1.Release;
Application.Terminate;
End;
Procedure TForm1.MyKey(Sender: TObject; Var Key: Char);
Begin
If Key = #27
Then TForm(Sender).Close;
//TForm(Sender).Release;
//Abort;
End;
Procedure TForm1.MyClose(Sender: TObject; Var CloseAction: TCloseAction);
Var
List: TStringlist;
Begin
Try
List:= TStringlist.Create;
List.Add('Hallo');
List.SaveToFile('Hallo.txt');
Finally
FreeAndNil(List);
End;
CloseAction:= caFree;
End;