Линейное движение по однородному фону является довольно простым в плане программной реализации. Достаточно закрашивать объект цветом фона, изменять его координаты и прорисовывать в новом месте, повторяя эти действия через определенный интервал времени.
Для реализации анимации, помимо двух уже известных компонентов TPaintBox (поле для рисования) и TButton (кнопка запуска), понадобится компонент TTimer со вкладки System. Компонент Timer имеет единственное событие OnTimer, которое выполняется пока Timer включен с интервалом по времени, установленным в свойстве Interval.
Расположите компонент Timer1 на форме. Установите его свойства Timer1.Interval := 100 и Timer1.Enabled := false
В коде программы необходимо прописать три процедуры (см. урок "Процедуры и функции при построении изображений"). Процедуру отрисовки объекта procedure TForm1.Cloud, процедуру, отрабатывающую на событие OnTimer, - procedure TForm1.Timer1Timer и процедуру запуска анимации, срабатывающую на нажатие кнопки, procedure TForm1.Button1Click.
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons, ExtCtrls, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; PaintBox1: TPaintBox; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { private declarations } // координаты прорисовки объекта. Доступны всем процедурам класса TForm1 x1, y1 : Integer; public { public declarations } // процедура прорисовки облака procedure Cloud (x, y: Integer; ColorCloud: TColor); end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Cloud(x, y: Integer; ColorCloud: TColor); begin // прорисовка облака из двух эллипсов with PaintBox1.Canvas do begin Pen.Style := psClear; Brush.Color := ColorCloud; Ellipse(x,y,x+80,y+40); Ellipse(x+30,y+10,x+100,y+50); end; end; procedure TForm1.Button1Click(Sender: TObject); begin // установка начальных значений x1:=0; y1:=50; Timer1.Interval:=100; // прорисовка картинки по которой двигается объект PaintBox1.Canvas.Brush.Color := clBlue; PaintBox1.Canvas.Rectangle(0,0, PaintBox1.Width, PaintBox1.Height); // Включение таймера - запуск анимации Timer1.Enabled := true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin // Закраска объекта цветом фона Cloud(x1,y1,clBlue); // Изменение координат прорисовки x1:=x1+1; // Прорисовка объекта в новом месте Cloud(x1,y1,clWhite); end; end.