2016-06-21 49 views
2

在Delphi 10.1柏林IDE,与VCL窗体应用程序项目,在项目选项对话框中,我有以下设置:在保持FormMain为主窗体的同时在主窗体之前创建辅助窗体?

enter image description here

现在我想​​形式的FormMain形式,而之前创建保留FormMain表格作为主表格。原因是:主窗体可能会在其FormCreate过程中载入数据(其中尚未创建​​),但要处理这些数据,需要使用​​表单中的设置。

但是,只要我将​​项目拖动到列表顶部,上面的主窗体组合框也变为​​!

那么如何在FormMain表格前创建​​表格,同时将FormMain表格作为主表格呢?

+3

从自动列表中删除它,并使用formOptions:= TformOptions.Create代替Application.CreateForm。 –

+0

你的意思是在'DPR'项目文件中? – user1580348

+0

是的............ –

回答

10

Application.CreateForm()创建的第一个TForm成为VCL的Application.MainForm,并且无法更改。因此,在CreateForm()分配MainForm之前,您需要执行任何初始化操作。

你有两个选择:

  1. 拆下自动创建列表​​(从而消除了产生CreateForm()调用它),然后在代码中创建它自己手动。 CreateForm()在完全创建之前不会分配MainForm,所以您可以通过以下两种不同方式之一处理该问题:

    a。直接在项目的文件中:

    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(甚至是独立的类),然后(自动)创建无论是形式之前创建的对象。在需要的时候FormMain和​​可以然后从该对象中检索其设置:

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

非常感谢您的解释和解决方案! – user1580348

相关问题