Пояснения к подпрограмме
В разделе операторов процедуры FormClick в операторе присоединения с помощью методов канвы вычерчивается рисунок.
Методом FILLRECT рисуются небо, трава и кузов машины в виде закрашенных прямоугольников. Аргумент этого метода задается функциейRECT, преобразующей координаты углов прямоугольника к типуTRect.
Методом ELLIPSEрисуются солнце, облако и колеса автомобиля, методом POLYGON - шасси, кабина и окна автомобиля.
Чтобы проверить, как выполняется подпрограмма, нужно запустить систему Delphi,выбрать командуFile New Application,в инспекторе объектов перейти на закладкуEvents, на этой закладке дважды щелкнуть мышью на событии OnClick и набрать в текстовом редакторе подпрограмму, воспользовавшись автоматически сформированной заготовкой процедуры TForm1.FormClick.
После запуска программы на выполнение кнопкой Run или клавишейF9 изображение выводится на канву при щелчке по ней мышью.
Пример 2.Осуществить движение изображения автомобиля, сформированного в примере 1.
Приложение использует процедуру FormClick, рассмотренную в примере 1, для вычерчивания исходного положения автомобиля.Движение осуществляется подпрограммой, текст которой включен в процедуру обработки события OnClick, происходящего при щелчке мышью по кнопке Button1,размещенной в форме Form1. Автоматически формируемое имя этой процедуры -TForm1.Button1Click (см. листинг 2).
{-------------------------------------------------------------------------------------------------------------------}
{ Листинг 2. Подпрограмма, осуществляющая движение автомобиля }
{-------------------------------------------------------------------------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
const
CarLength = 240; {Длина изображения автомобиля}
CarHeight = 96; {Высота изображения автомобиля}
XL : Integer = 385; {Координаты}
YL = 305; {прямоугольника с }
XR : Integer = 625; {изображением}
YR = 400; {автомобиля}
var {Копия изображения автомобиля}
CarImage : array [1..CarLength,1..CarHeight] of TColor;
{--------------------------------------}
procedure SaveCar; {Сохранить копию изображения автомобиля}
var {--------------------------------------}
x, y : Integer; {Координаты пикселей}
i, j : Integer; {Индексы элементов массива}
begin {SaveCar}
x := XL;
for i:=1 to CarLength do
begin
y := YL;
for j:=1 to CarHeight do
begin
CarImage[i,j] := Form1.Canvas.Pixels[x,y];
y := y + 1;
end;
x := x + 1;
end;
end; {SaveCar}
{------------------------------}
procedure EraseCar; {Стереть изображение автомобиля}
begin {----------} {EraseCar}
with Form1.Canvas do
begin
Brush.Color := clBlue; {Цвет неба, на фоне которого едет авто}
FillRect(Rect(XL,YL,XR,YR));
end;
end; {EraseCar}
{------------------------------------------}
procedure DisplayCar; {Воспроизвести копию изображения автомобиля}
var {------------------------------------------}
x, y : Integer; {Координаты пикселей}
i, j : Integer; {Индексы элементов массива}
begin {DisplayCar}
x := XL;
for i:=1 to CarLength do
begin
y := YL;
for j:=1 to CarHeight do
begin
Form1.Canvas.Pixels[x,y] := CarImage[i,j];
y := y + 1;
end;
x := x + 1;
end;
end; {DisplayCar}
begin {Button1Click}
FormClick(Form1); {Нарисовать автомобиль}
SaveCar;
repeat
EraseCar;
XL := XL - 1; {Движение влево}
XR := XR - 1;
DisplayCar;
until XL<0;
end; {Button1Click}