Вообще для анимации ни TImage, ни TTimer не подходят, я бы на твоем месте выбрал бы как минимум вместо TImage - TPaintBox, а вместо таймера использовал бы обычный цикл, вот пример данной реализации:
Код:
type
TPigs = array of TJpegImage; //проолжаю идею Страдальца)
TForm1 = class(TForm)
Button1: TButton; //кнопка старта и остановки анимации анимации
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FIsAnimation:boolean; //определяет, включена ли анимация
FAnimStopKadr:Integer; //время задержки кадра
FPigs:TPigs; // сами кадры
public
procedure UploadPigs; //загрузка кадров
procedure DestroyPigs; //выгрзука кадров
procedure StartAnimPigs; //запуск анимации
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FIsAnimation:=false; //при старте анимация отключена!
FAnimStopKadr:=100; //задержка кадра 100 мс
UploadPigs; //загружаем картинки
end;
procedure TForm1.StartAnimPigs;
var
b:byte;
begin
b:=0;
while FIsAnimation do
begin
PaintBox1.Canvas.Draw(0,0,FPigs[b]);
Inc(b);
if b > High(FPigs) then b:=0;
Sleep(FAnimStopKadr);
Application.ProcessMessages;
if Application.Terminated then FIsAnimation:=false;
end;
end;
procedure TForm1.UploadPigs; //загрузка картинок в массив
var
b:byte;
begin
SetLength(FPigs, 5);
for b:=Low(FPigs) to High(FPigs) do
begin
FPigs[b]:=TJPEGImage.Create;
//файлы с картинками pig1.jpg, pig2.jpg и т. д..
FPigs[b].LoadFromFile(ExtractFilePath(Application.ExeName)+'pig'
+IntToStr(b+1)+'.jpg');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FIsAnimation:=not FIsAnimation;
if FIsAnimation then StartAnimPigs;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FIsAnimation:=false;
Application.ProcessMessages;
DestroyPigs;
end;
procedure TForm1.DestroyPigs;
var
b:byte;
begin
for b:=Low(FPigs) to High(FPigs) do
FPigs[b].Destroy;
SetLength(FPigs, 0);
end;
Проверил, все работает на ура)