奈良県でソフトウェア開発・Webサイトの運営をしているフリーランスのエンジニアです

ロジカルアーツ研究所

C++Builder

C++Builder 2009でフォームの重なり順を変更できない問題に対処する

投稿日:2009年12月21日 更新日:

これはC++Builder 2007以降に特有の問題らしいのですが、ShowModalメソッドではなくShowメソッドでフォームを開いた場合、常に後から作成した方のフォームが前面に来てしまい、メインフォームが隠れてしまうという問題が起こります。後ろのフォームをクリックしてもどうしても前に来ず、まるでモード付きダイアログのような振る舞いをするのです。C++Builder 2006以前ではこのような問題は起こらず、クリックでフォームの重なり順を切り替えることができました(これが期待される動作です)。

これには大変悩まされましたが、TApplicationのMainFormOnTaskBarプロパティが影響していることがわかりました。この問題はプロジェクトのメインファイル内のWinMain関数にある以下の行をコメントアウトすることにより回避できます。

//Application->MainFormOnTaskBar = true; ←コメントアウト

ヘルプを見るとWindows Vista以降導入されたAero効果を使用するために必要らしいのですが、これをtrueに設定するとフォームのZオーダーに影響を与えるとも書いてあります。C++Builder 2007以降ではこのプロパティがデフォルトでtrueになっており、そのままでは冒頭のような問題が起きてしまうのでした。Aero効果を使う必要性がなければコメントアウトした方がいいと思います。

-C++Builder

Copyright© ロジカルアーツ研究所 , 2024 All Rights Reserved Powered by STINGER.