关闭TForm
分配为Application.MainForm
退出应用程序的那个,这是设计使然。
如果您希望它MainForm
像任何其他 SDI 窗口一样运行并且在其他 SDI 窗口仍然打开的情况下独立关闭而不退出应用程序,您将必须创建一个单独TForm
的作为真实窗口MainForm
,然后对用户隐藏它(设置Application.ShowMainForm
为 false在启动之前Application.Run()
调用),然后您可以TSDIAppForm
根据需要创建对象。当最后一个TSDIAppForm
对象关闭时,您可以关闭MainForm
,或Application.Terminate()
直接调用,退出应用程序。
要为每个任务栏按钮提供TSDIAppForm
自己的任务栏按钮,您需要重写虚拟CreateParams()
方法:
如何获取不是主表单的表单的任务栏按钮?
试试这个:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMyRealMainForm, MyRealMainForm);
Application.CreateForm(TSDIAppForm, SDIAppForm);
SDIAppForm.Visible := True;
Application.ShowMainForm := False;
Application.Run;
end.
procedure TSDIAppForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := 0;
end;
procedure TSDIAppForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TSDIAppForm.FormDestroy(Sender: TObject);
begin
if Screen.FormCount = 2 then // only this Form and the MainForm
Application.Terminate;
end;
procedure TSDIAppForm.FileNew1Execute(Sender: TObject);
var
LNewDoc: TSDIAppForm;
begin
LNewDoc := TSDIAppForm.Create(Application);
LNewDoc.Show;
end;