Delphi2007のVCLアプリケーションウィンドウのVista不具合解消対応
25 VCLonVista 動作確認 Delphi2007 更新日 2008/06/23(月)

Delphi2007ではVCLがVista対応されました。

2007以前のDelphiのVCLで作られたアプリケーションは
特殊なウィンドウの親子関係をもっていたので
タスクバー上マウス移動でのサムネイル表示や
Flip 3DといったVistaの新しい機能が正しく動いていないので対応されたのでしょう。

Vista以前のWindowsでも、Delphi製やC++Builder製のアプリは
アプリケーションウィンドウが使われていた為に変な挙動なっていましたが
Delphi2007でコンパイルすることで、これも修正されています。

ソースコードの互換性を実現するために
プロジェクトソースのコードで実現されています。
Delphi2007で新規にVCLフォームアプリケーションをつくったときの
プロジェクトソースは次の通り
────────────────────
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
────────────────────
新設されたMainFormOnTaskbarプロパティを設定する行が追加されています。

今までのVCLは
画面はForm1だが、タスクバーに格納されているのは
Applicationのウィンドウという
少々不格好な構造をしていたのですが

MainFormOnTaskbar := Trueと指定されていると
画面もタスクバーに格納されるのもForm1のウィンドウになります。

この行を削除すると、MainFormOnTaskbar := False になり
Delphi2006以前の旧バージョンのアプリケーションウィンドウを使った
変な挙動のウィンドウの親子関係になります。

修正されて、まともになってよかったです。


既存のプロジェクトはこの1行はないので
Vista対応したい場合は、既存プロジェクトを開いて
プロジェクトソースにこの1行を入れてコンパイルしてください。


参考────────────────────
DelFusaBlog Vista対応VCL、AppWinFix#more
http://delfusa.blog65.fc2.com/blog-entry-36.html#more

D_DevLog アプリケーションウィンドウに対する対処 (1)
http://ddev.blog46.fc2.com/blog-entry-66.html

D_DevLog アプリケーションウィンドウに対する対処 (4)
http://ddev.blog46.fc2.com/blog-entry-70.html#more