3

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

在此处输入图像描述

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

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

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

4

1 回答 1

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;
    

    湾。在 MainForm 的OnCreate事件中:

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

    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TSettingsDM, SettingsDM);
    Application.CreateForm(TFormMain, FormMain);
    Application.CreateForm(TFormOptions, formOptions);
    Application.Run;
    
于 2016-06-21T18:47:42.877 回答