フォームのアイコンをアニメーションにしたい
|
タイマーイベントを使って、AppliCationのアイコンをきりかえてやればアニメーションGIFのような効果ができます。
プロジェクトの*.resファイルに、アイコン'ICON1'-'ICON5'をアニメ風に作成して下さい。
フォームにStartBtn、StopBtn の2個のボタンとTTimer(Intervalプロパティを100程度)を貼り付けます。
private 部に
IconStat: integer;
ICon1,ICon2,ICon3,ICon4,ICon5: TIcon;
と書き加えます。
// あらかじめリソースを参照するアイコンを作成
procedure TForm1.FormCreate(Sender: TObject);
begin
ICon1 := TIcon.create;
ICon1.Handle := LoadIcon(HInstance,'ICON1');
ICon2 := TIcon.create;
ICon2.Handle := LoadIcon(HInstance,'ICON2');
ICon3 := TIcon.create;
ICon3.Handle := LoadIcon(HInstance,'ICON3');
ICon4 := TIcon.create;
ICon4.Handle := LoadIcon(HInstance,'ICON4');
ICon5 := TIcon.create;
ICon5.Handle := LoadIcon(HInstance,'ICON5');
Application.Icon.Handle := ICon1.Handle;
IconStat := 1;
end;
// 破棄
procedure TForm1.FormDestroy(Sender: TObject);
begin
ICon1.Free;
ICon2.Free;
ICon3.Free;
ICon4.Free;
ICon5.Free;
end;
// スタート
procedure TForm1.StartBtnClick(Sender: TObject);
begin
Timer1.Enabled := true;
end;
// ストップ
procedure TForm1.StopBtnClick(Sender: TObject);
begin
Timer1.Enabled := false;
IconStat := 1;
Application.Icon.Handle := ICon1.Handle;
end;
// タイマーイベントでアイコンの切り替え
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If IconStat = 5 then IconStat :=1
else IconStat := IconStat + 1;
Case IconStat of
1: Application.Icon.Handle := ICon1.Handle;
2: Application.Icon.Handle := ICon2.Handle;
3: Application.Icon.Handle := ICon3.Handle;
4: Application.Icon.Handle := ICon4.Handle;
else Application.Icon.Handle := ICon5.Handle;
end;
end;
4−5個アイコンを作るとスムースです。
注意事項として。resファイルを書き直した時は、[プロジェクトの再構築]を行ってから実行して下さい。resの変更が反映されません。また、アイコンの名称はイメージエディタでは、デフォルトでIcon?となりますので、オリジナルな名称に変えて下さい。
また、イメージリストを使えば、以下のようにすれば、ほぼ同じ結果が得られます。
var
IconCount : integer;
procedure TForm1.Button1Click(Sender: TObject); // start
begin
Timer1.Interval := 100;
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if IconCount >=ImageList1.Count then IconCount := 0;
ImageList1.GetIcon(IconCount, Application.Icon);
inc(IconCount);
end;
この場合は、使用するアイコンイメージは、リソースに入りませんので、プログラムアイコンとして使用出来ません。必要ならば、リソースからイメージリストへロードする処理を加えて下さい。 |
|