フォームの重なり順序を変更する方法は?

フォームの重なり順序を変更する方法は?」という質問を発見して、まだ解決していないようなので調べてみました。

Form1とForm2の2つを作成し、Form1を表示するときにForm2を表示するようにします。

void __fastcall TForm1::FormShow(TObject *Sender)
{
  Form2->Show();
}

プログラムを実行すると、Form1とForm2の2つのフォームが表示されます。

ここで、Form1をクリックしてアクティブにしても、Form2がForm1の上に表示されたままになります。

form.gif

この現象はC++Builder2007とC++Builder2009の両方で確認できました。

調べてみたところ、TApplication.MainFormOnTaskBarが影響しているようです。

C++Builder2009ではProject1.cppの次の行をコメントアウトすれば、期待する動作になります。

Application->MainFormOnTaskBar = true;

C++Builder2007ではProject1.cppの次の行をコメントアウトします。

SetApplicationMainFormOnTaskBar(Application, true);

SetApplicationMainFormOnTaskBarはApplication.MainFormOnTaskBarの値を設定するだけの関数です。

TApplication.MainFormOnTaskBarはWindows Vista Aero 効果のための機能です。

ヘルプを見るとTApplication.MainFormOnTaskBarの項目には、

このプロパティに依存するアプリケーションでは、このプロパティが MainForm の Z オーダーに影響を与える点に注意してください。

とあります。

Quality Centralにもありました。

この挙動がWindows Vista Aeroの仕様なのか、VCLの仕様なのかはわかりません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください