Delphi Tips 
-----------------------------

0265  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/09/19 西坂良幸 rev 1.2
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/09/20 西坂良幸 編集
フォームのアイコンをアニメーションにしたい

タイマーイベントを使って、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;

この場合は、使用するアイコンイメージは、リソースに入りませんので、プログラムアイコンとして使用出来ません。必要ならば、リソースからイメージリストへロードする処理を加えて下さい。
参照: [Delphi-ML:42725] [Delphi-ML:42748] <アイコン> <フォーム>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp