「フォームの重なり順序を変更する方法は?」という質問を発見して、まだ解決していないようなので調べてみました。
Form1とForm2の2つを作成し、Form1を表示するときにForm2を表示するようにします。
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form2->Show();
}
プログラムを実行すると、Form1とForm2の2つのフォームが表示されます。
ここで、Form1をクリックしてアクティブにしても、Form2がForm1の上に表示されたままになります。
この現象は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の仕様なのかはわかりません。