Delphi2009でのFormの重なりを解除するには?

解決


サトウ  2011-05-27 09:30:48  No: 40557

Delphi2009でのFormの重なりについて教えてください。

MainForm(こちらをメインフォームにする)
SubForm

という2つのフォームを作成し、アプリケーション起動と同時にSubForm.Show()を実行して常に2つのフォームを表示した状態にしたいのですが、常にSubFormのMainForm前面に出てきてしまいます。MainFormが後ろに隠れてしまって非常に困っています。

C++Builder2009ではProject1.cppの次の行をコメントアウトすれば、期待する動作になるとの解決方法があるようですが、
Application->MainFormOnTaskBar = true;

Delphiの場合は、どのようにすれば解決するでしょうか?
よろしくお願いいたします。

                                                サトウ


au  2011-05-27 18:06:27  No: 40558

Form2の定義に以下を追加したら良いかと
protected
  procedure CreateParams(var Params: TCreateParams); override;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := Application.Handle;
end;

標準だと、Params.WndParentにメインフォームのハンドルが入ってる状態になります。
WndParentに0を入れた場合は、Form2もタスクバーに表示された状態になりメインフォームを最小化してもForm2は最小化されない状態になります。
Application.Handleを入れた場合は、Form2はタスクバーに表示されずメインフォームと一緒に最小化されます。


サトウ  2011-05-27 20:03:12  No: 40559

AUさん  ありがとうございます。

早速、試してみました。望んでいた動作(といううより、本来そうなって当然であると思っていますが)になりました。

AppをDelphi7からDelphi2009に変換していますが、Delphi2009の動作の違いに苦労しています。今後ともよそしくお願いいたします。

                                                サトウ


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加