Класс TCanvas.
Класс TCanvas называют канвой. Канва не является компонентом, она входит в качестве свойства в те из них, которые умеют нарисовать себя. Канва включает в себя свойства:
Font (шрифт), Pen(перо), Brush(кисть), Pixel(точка), PenPos(текущие координаты).
Канва содержит в себя и некоторые методы: Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4:Integer) – чертит дугу эллипса в охватывающем прямоугольнике (X1, Y1) – (X2, Y2)
Ellipse (X1, Y1, X2, Y2:Integer) эллипс в прямоугольнике (X1, Y1) – (X2, Y2)
LineTo (X, Y: Integer) чертит линию от текущей точки пера до точки (X, Y)
MoveTo (X, Y: Integer) перемещает перо без рисования в точку (X, Y)
Rectangle (X1, Y1, X2, Y2:Integer) вычерчивает прямоугольник (X1, Y1) – (X2, Y2)
FlooFill (X, Y: Integer; Color:TColor; FillStyle:TFillStyle) заливка канвы текущей кистью.
Задача 1. Используя в качестве примера приложение «Канва»
из папки «Задание», составить программу движения кораблика.
Код программы:
procedure Titanik(x,y: integer; color: TColor); // координаты
базовой точки// цвет корабля
const dx = 5; dy = 5;
var buf: TColor;
begin
with form1.canvas do
// Вместе с объектом «Канва»
begin
buf:=pen.Color;
// сохраним текущий цвет
pen.Color:=color;
// установим нужный цвет
MoveTo(x,y); // рисуем ... корпус
LineTo(x,y-2*dy); LineTo(x+10*dx,y-2*dy); LineTo(x+11*dx,y-3*dy);
LineTo(x+17*dx,y-3*dy); LineTo(x+14*dx,y);
LineTo(x,y);
MoveTo(x+3*dx,y-2*dy); // надстройка
LineTo(x+4*dx,y-3*dy); LineTo(x+4*dx,y-4*dy); LineTo(x+13*dx,y-4*dy);
LineTo(x+13*dx,y-3*dy); MoveTo(x+5*dx,y-3*dy); LineTo(x+9*dx,y-3*dy);
Rectangle(x+8*dx,y-4*dy,x+11*dx,y-5*dy); // капитанский мостик
Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy); //
труба
Ellipse(x+11*dx,y-2*dy,x+12*dx,y-1*dy); // иллюминаторы
Ellipse(x+13*dx,y-2*dy,x+14*dx,y-1*dy);
MoveTo(x+10*dx,y-5*dy); // мачта
LineTo(x+10*dx,y-10*dy);
MoveTo(x+17*dx,y-3*dy); // оснастка
LineTo(x+10*dx,y-10*dy); LineTo(x,y-2*dy);
pen.Color:=buf;
//
восстановим старый цвет карандаша
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject); // обработка сигнала таймера
begin
Titanik(x,y,form1.color);
// стереть рисунок
if x < Form1.ClientWidth
then
x := x+5
else
begin
// новый рейс
x
:= 0;
y := Random(50) +
100;
// случайный выход слева по у
end;
Titanik(x,y,clWhite);
// нарисовать в новой точке
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
x:=0;
y:=100;
Form1.Color:=clNavy;
Timer1.Interval :=
50;
// сигнал таймера каждые 50 мСек
end;