アイコン化のアニメーションを表示
(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)