首页 文章

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

提问于
浏览
3

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

enter image description here

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

但是只要我将 formOptions 项拖到列表顶部,上面的主表单组合框也会变为 formOptions

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

1 回答

  • 11

    使用 Application.CreateForm() 创建的第一个 TForm 成为VCL的 Application.MainForm ,无法更改 . 因此,在 CreateForm() 指定 MainForm 之前,需要执行任何初始化 .

    您有两种选择:

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

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

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

    湾在MainForm的 OnCreate 事件中:

    procedure TFormMain.FormCreate(Sender: TObject);
    begin
      formOptions := TFormOptions.Create(Application); // or even Self
    end;
    
    • 改为将共享设置移动到 TDataModule (甚至是独立类),然后在创建任一表单之前(自动)创建该对象 . 然后, FormMainformOptions 可以在需要时从该对象检索其设置:
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TSettingsDM, SettingsDM);
    Application.CreateForm(TFormMain, FormMain);
    Application.CreateForm(TFormOptions, formOptions);
    Application.Run;
    

相关问题