在保持 FormMain 作为主窗体的同时在主窗体之前创建辅助窗体?

Create secondary form before main form while keeping FormMain as main form?

在 Delphi 10.1 Berlin IDE 中,使用 VCL Form 应用程序项目,在“项目选项”对话框中,我有以下设置:

现在我希望在 FormMain 表单之前创建 formOptions 表单,同时将 FormMain 表单作为主表单。原因是:主窗体可以在其 FormCreate 过程中加载数据(其中 formOptions 仍未创建),但要处理这些数据,它需要来自 formOptions 窗体的设置。

但是当我将 formOptions 项目拖到列表顶部时,上面的主窗体组合框也会更改为 formOptions!

那么如何使 formOptions 表单在 FormMain 表单之前创建,同时保持 FormMain 表单作为主表单?

Application.CreateForm() 创建的第一个 TForm 成为 VCL 的 Application.MainForm,并且无法更改。因此,在 CreateForm() 分配 MainForm.

之前,请执行您需要执行的任何初始化操作

你有两个选择:

  1. 从自动创建列表中删除 formOptions(从而删除为它生成的 CreateForm() 调用),然后自己在代码中手动创建它。 CreateForm() 在完全创建之前不会分配 MainForm,因此您实际上可以通过两种不同的方式之一来处理它:

    一个。直接在项目的 .dpr 文件中:

    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    formOptions := TFormOptions.Create(Application);
    Application.CreateForm(TFormMain, FormMain);
    Application.Run;
    

    b。在 MainForm 的 OnCreate 事件中:

    procedure TFormMain.FormCreate(Sender: TObject);
    begin
      formOptions := TFormOptions.Create(Application); // or even Self
    end;
    
  2. 将您的共享设置移至 TDataModule(或什至是独立的 class),然后(自动)在创建任一表单之前创建该对象。 FormMainformOptions 然后可以在需要时从该对象检索它们的设置:

    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TSettingsDM, SettingsDM);
    Application.CreateForm(TFormMain, FormMain);
    Application.CreateForm(TFormOptions, formOptions);
    Application.Run;