2017-12-05 25 views
0

DUnitテストから始まっていますので、初心者のご迷惑をおかけして申し訳ありません。私は簡単なテストを実行しようとし、コンパイラは、私のテストクラスのSetUpを実行すると、 'フォームを作成することはできませんメッセージの返信を停止します。現在アクティブなMDIフォームはありません '。 DUnitテスト - フォームを作成できません。現在MDIフォームが有効になっていません

は、いくつかの研究の後、私は私の問題に関連するいくつかの説明が、どれを見つけました。

問題は、私の子供の起源クラスのCreateメソッドを呼び出すときに起きることがあります。私はすべてのプロシージャと関数をTfrmFooから呼び出すことができるクラスを意味します。そして私のテストクラスはTestTfrmFooでなければなりません。 TFrmFooにはいくつかの基本コードTfrmParentFooを持つ親があります。

私はこのようなメソッドを作成して呼んでいる

:その後

... 

implementation 

procedure TestTfrmFoo.SetUp; 
begin 

    FfrmParentFoo := TfrmParentFoo.Create(nil); 

    FfrmFoo := TfrmFoo.Create(FfrmParentFoo);  

end; 

procedure TestTfrmFoo.TearDown; 
begin 
    FfrmFoo.Free; 
    FfrmFoo := nil; 
end; 

... 

、TfrmFooクラスのCreateメソッドが呼び出されると、次のエラーが発生:「フォームを作成することはできません。現在アクティブなMDIフォームはありません '。

私はすでに「fsNormal」の代わりに「fsMDIChild」と何もFormStyleプロパティを設定する私の子クラスのTfrmFooの作成上書きしようとしました。私はまた、睡眠(500)を使用することについていくつかのアイデアを発見したが、問題は続く。

編集:Remy Lebeau貢献した後、私は子供を呼び出して、作成した子へのパラメータとしてそれを使用する前に、親フォームを作成するには、セットアップのテストを変更 。同じエラーメッセージ。私は間違った何かを変えましたか

その他のヒントはありますか? tks!

答えて

1

TFormfsMDIChildへのFormStyleセットを持っている場合は、プロジェクトMUSTは、そのFormStylefsMDIFormに設定されて作成されたApplication.MainFormを持っています。これは、VCLのハードコードされた要件ではなく、基礎となるMDI系(ただし、いくつかの手作業とcircumvent this limitationへの道があります)。

表示されているエラーは、Application.MainFormが作成されていないことを意味し、フォームが作成される前にfsMDIFormに設定されています。あなたはそれを修正する必要があります。 Create/OnCreateが割り当てしようとするoppurtunityを持つ前に、子フォームは、早期にDFMのストリーミング処理中に発生したそのHWNDを作成するときにエラーが発生したため、子フォームのコンストラクタでFormStyleまたはOnCreateイベントは、遅すぎる設定

FormStyle

+0

ありがとう、私はそれを試みます。欠点は、.dprファイルで親に付属しているすべての参照を手動でマップする必要があることです。一度は自動的に行われず、特定のフォルダ全体をマップする方法を見つけることができませんでした。 – DTondin

0

いくつかの試行の後、私は子供のCreateメソッド
FfrmFoo := TfrmFoo.Create(FfrmParentFoo);を削除し、チャームのように働いた:D。私は親に新しいものを作成した後でも新しい子インスタンスを作成しようとしていたので、

問題でした。最終的なコードは次のようになりました:

... 

implementation 

procedure TestTfrmFoo.SetUp; 
begin 

    FfrmParentFoo := TfrmParentFoo.Create(nil);  

end; 

procedure TestTfrmFoo.TearDown; 
begin 
    FfrmFoo.Free; 
    FfrmFoo := nil; 
end; 

... 

おかげRemy Lebeauを洞察するために。

関連する問題