任务栏上显示多个实例的SDI应用程序

时间:2016-06-17 17:31:36

标签: delphi vcl delphi-10.1-berlin

我使用Delphi Berlin VCL模板创建了一个SDI应用程序。我可以通过编程File | New来创建其他实例,如下所示:

procedure TSDIAppForm.FileNew1Execute(Sender: TObject);
var
   LNewDoc: TSDIAppForm;
begin
   LNewDoc := TSDIAppForm.Create(Application);
   LNewDoc.Show;
end;

只有所有者表单显示在任务栏上。此外,关闭所有者表单将关闭所有实例。如何取消链接其他实例以使它们独立运行并在任务栏上单独显示?

1 个答案:

答案 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.