我使用Delphi Berlin VCL模板创建了一个SDI应用程序。我可以通过编程File | New来创建其他实例,如下所示:
procedure TSDIAppForm.FileNew1Execute(Sender: TObject);
var
LNewDoc: TSDIAppForm;
begin
LNewDoc := TSDIAppForm.Create(Application);
LNewDoc.Show;
end;
只有所有者表单显示在任务栏上。此外,关闭所有者表单将关闭所有实例。如何取消链接其他实例以使它们独立运行并在任务栏上单独显示?
答案 0 :(得分:2)
关闭分配为TForm
的{{1}}退出应用,这是设计使然。
如果您希望Application.MainForm
像任何其他SDI窗口一样操作并在不退出应用程序的情况下独立关闭,如果其他SDI窗口仍处于打开状态,则您必须创建一个单独的MainForm
来充当真实的TForm
然后将其隐藏起来(在调用MainForm
之前启动时将Application.ShowMainForm
设置为false),然后您可以根据需要创建Application.Run()
个对象。关闭最后一个TSDIAppForm
对象后,您可以关闭TSDIAppForm
,或直接致电MainForm
以退出该应用。
要为每个Application.Terminate()
提供自己的任务栏按钮,您需要覆盖虚拟TSDIAppForm
方法:
How can I get taskbar buttons for forms that aren't the main form?
试试这个:
CreateParams()
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMyRealMainForm, MyRealMainForm);
Application.CreateForm(TSDIAppForm, SDIAppForm);
SDIAppForm.Visible := True;
Application.ShowMainForm := False;
Application.Run;
end.