Постановка задачи. Реализовать движение картинки, загруженной в TImage, по окружности.
Реализация. Нарисуйте в редакторе Paint небольшую картинку, например, шарик и сохраните ее. Положите на форму две кнопки «Старт» и «Выход», таймер и один TImage. Найдите свойство Picture у компонента TImage и загрузите туда нарисованную картинку. Вид формы приведен на рис. 15.
Рис. 15. Форма для проекта
Для удобства рассмотрения напишем процедуру krug, рисующую окружность, или можем использовать готовый метод ellipse. Введём следующие глобальные переменные:
u0, v0, mx, my, rad : integer;
dfi, fi : real;
procedure xytouv(x,y:real; var u,v:integer);
begin
u:=u0+round(x*mx);
v:=v0-round(y*my);
end;
procedure krug(u0,v0,rad:integer);
var x,y:real;
u,v:integer;
begin
Form1.Canvas.Pen.Color:=ClRed;
fi:=0;
dfi:=0.01;
x:=rad;
y:=0;
xytouv(x,y,u,v);
while fi<=2*pi do
begin
Form1.Canvas.MoveTo(u,v);
x:=rad*cos(fi);
y:=rad*sin(fi);
xytouv(x,y,u,v);
Form1.Canvas.LineTo(u,v);
fi:=fi+dfi;
end;
end;
Далее дан код остальных процедур, а момент движения нарисован на рис. 16.
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
mx:=1;
my:=1;
u0:=130;
v0:=130;
rad:=100;
Image1.Transparent:=true;
Image1.Left:=u0+rad+20;
Image1.Top:=v0-20;
Timer1.Enabled:=false;
fi:=0;
dfi:=0.01;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
// Меняем координаты компонента TImage
Image1.Left:=u0+round((rad+20)*cos(fi));
Image1.Top:=v0-20-round((rad+20)*sin(fi));
fi:=fi+dfi;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
krug( u0,v0,rad);
end;
Рис. 16. Движение шарика по окружности
Задание. Создайте проект «Движение компонента TImage по фоновому рисунку». Пусть на форме лежит картинка, например, пейзаж, а вторая небольшая картинка, например птичка, будет летать слева направо и обратно. Используйте свойство Picture компонентов TImage для загрузки в него картинок.