« C++Builder2009で扱える画像形式のまとめ | メイン | C++Builder Tipsに日付関連の記事を追加 »

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

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

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の仕様なのかはわかりません。

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/932

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2009年03月17日 15:33に投稿されたエントリーのページです。

ひとつ前の投稿は「C++Builder2009で扱える画像形式のまとめ」です。

次の投稿は「C++Builder Tipsに日付関連の記事を追加」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35