在主窗体之前创建辅助表单,同时保持FormMain为主窗体?

use*_*348 3 forms delphi delphi-10.1-berlin

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

在此输入图像描述

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

但是一旦我将formOptions项目拖到列表的顶部,上面的主要形式组合框也会变为formOptions!

那么如何在表格作为主表格的同时在表格formOptions之前制作表格?FormMainFormMain

Rem*_*eau 11

TForm创建的第一个Application.CreateForm()变为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;
    
    Run Code Online (Sandbox Code Playgroud)

    湾 在MainForm的OnCreate活动中:

    procedure TFormMain.FormCreate(Sender: TObject);
    begin
      formOptions := TFormOptions.Create(Application); // or even Self
    end;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将您的共享设置移动到TDataModule(或甚至是独立的类),然后在创建任一表单之前(自动)创建该对象.FormMain然后formOptions可以在需要时从该对象检索其设置:

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