アイコン化のアニメーションを表示
(Delphi 4 以前用 Tips) よくある質問です。Delphi(C++Builder)でつくったアプリケーションはアイコン化ボタンを押してもアニメーションせずにアイコン化します。これにはあれこれ理由があり、解決策もあるんですがあれこれ大変みたいです。そうこうしているうちに本家Borlandのサイトにこれの解説および解決方法が掲載されたのでそちらをご覧ください。
と、思ったらサイトが更新されてページが無くなってしまいました。ですので下にその内容とほぼ同じ物を掲載しておきます。
Delphiのアプリケーションは、非表示のApplicationウィンドウがフォームを管理しており、最小化をしても、非表示の親ウィンドウApplicationが最小化されるので(メインウィンドウはこのとき非表示になる)、アニメーションは表示されない。 最小化、復元を行なうときに、フォームの上にぴったりのサイズで Applicationウィンドウを表示すれば、アニメーションを表示させることがでる。
(※ Delphi 5 からは標準でアニメーションするようになりました)
■ アイコン化アニメーションを表示する例 |
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics,Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private procedure MyHandle(var Msg: TMsg; var Handled: Boolean); procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND; procedure MinimizeForm; procedure RestoreForm; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.MyHandle(var Msg: TMsg; var Handled: Boolean); begin if (Msg.Message = WM_SYSCOMMAND) and (Msg.WParam = SC_RESTORE) then begin RestoreForm; Handled := True; end; end; procedure TForm1.WMSysCommand(var Msg: TMessage); begin if Msg.WParam = SC_MINIMIZE then begin MinimizeForm; end else begin inherited; end; end; procedure TForm1.MinimizeForm; begin with Application do begin SetForegroundWindow(Handle); SetWindowPos(Handle, HWND_BOTTOM,Left, Top, Width, 0, SWP_NOZORDER); ShowWindow(Handle, SW_MINIMIZE); end; end; procedure TForm1.RestoreForm; begin with Application do begin SetForegroundWindow(Handle); ShowWindow(Handle, SW_RESTORE); SetWindowPos(Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER); end; end; { FormのOnCreateイベント } procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := MyHandle; end; end. |
(Thanx : Mr.Abe)