在Delphi 10.1 Berlin IDE中,使用VCL Form应用程序项目,在Project Options对话框中,我有以下设置:
现在我希望在FormMain表单之前创建formOptions表单,同时将FormMain表单保留为主表单.原因是:主窗体可以在其FormCreate过程中加载数据(其中还没有创建formOptions),但是为了处理这些数据,它需要formOptions表单中的设置.
但是一旦我将formOptions项拖到列表顶部,上面的主表单组合框也会更改为formOptions!
那么如何在FormMain表单之前创建formOptions表单,同时将FormMain表单保留为主表单?
解决方法
使用Application.CreateForm()创建的第一个TForm成为VCL的Application.MainForm,并且无法更改.因此,在CreateForm()分配MainForm之前,需要做任何初始化.
您有两种选择:
>从自动创建列表中删除formOptions(从而删除为其生成的CreateForm()调用),然后在代码中自己手动创建它. CreateForm()在完全创建之前不会分配MainForm,因此您可以通过以下两种方式之一实际处理它:
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(甚至是独立的类),然后在创建任一Forms之前(自动)创建该对象.然后,FormMain和formOptions可以在需要时从该对象检索其设置:
Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TSettingsDM,SettingsDM); Application.CreateForm(TFormMain,FormMain); Application.CreateForm(TFormOptions,formOptions); Application.Run;