2016-06-21 5 views
2

、VCLフォームアプリケーションプロジェクトで、プロジェクトオプションダイアログで、私はこれらの設定を持っている:FormMainをメインフォームとして維持しながら、メインフォームの前にセカンダリフォームを作成しますか?デルファイ10.1ベルリンIDEで

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を割り当てる前に、必要な初期化を行います。

次の2つのオプションがあります。

  1. 自動作成リストから​​を削除する(したがって、それのために生成さCreateForm()コール削除)をした後、コードで手動で自分で作成します。 CreateForm()は完全に作成されるまでMainFormを割り当てないので、2つの異なる方法のいずれかでこれを実際に処理できます。

    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

関連する問題