Изучим основные приемы рисования. Рисование на форме (как, впрочем, и на многих других объектах) происходит через контекст устройства (холст). Этот объект появляется в виде подсказки после точки при наборе программы.
К этому объекту (Canvas) мы можем приписывать разные другие объекты, в частности кисть (TBrush), перо (TPen) и шрифт (TFont). Кроме того, на холсте (Canvas) мы можем использовать картинку (TBitmap). Эти объекты будут рассмотрены подробнее в следующих уроках.
Так как при рисовании нам постоянно придется использовать конструкции вида Form1.Canvas, то лучше эту часть вынести за скобки с помощью with.
Код:
with Form1.Canvas do
begin
...
end;
Между begin и end мы как раз и будем рисовать. Куда поместить весь этот код, зависит от задачи. Можно написать его в обработчике нажатия какой-нибудь кнопки или еще где-нибудь, где вам надо. Мы же поместим его в обработчик FormPaint для нашей формы. Логично это сделать потому, что, в частности, это событие возникает и при создании формы. Кроме того, если окно нашей формы будет закрыто другим окном, а потом снова окажется видимым, то код FormPaint также будет выполняться, так что мы остановимся именно на этом обработчике.
Давайте для начала нарисуем кружок желтого цвета:
procedure TForm1.FormPaint(Sender: TObject);
begin
with Form1.Canvas do
begin
//Задаем кисть желтого цвета
Brush.Color:=RGB(255, 255, 0);
//Рисуем круг
Ellipse(10, 10, 30, 30);
end;
end;
Аналогичным образом можно нарисовать прямоугольник (используем Square), напечатать некой текст (TextOut) или вывести еще какие-нибудь примитивы.
Для рисования линий используются методы LineTo и MoveTo. Первый из них рисует отрезок, второй - просто передвигает точку рисования.
Вот пример их использования:
//Передвигаем перо в точку (10, 10)
Form1.Canvas.MoveTo(10, 10);
//Рисуем три линии
Form1.Canvas.LineTo(30, 70);
Form1.Canvas.LineTo(80, 40);
Form1.Canvas.LineTo(10, 10);
Тот же результат можно получить и через метод Polygon.
Он в качестве параметра берет массив точек (вершин):
var
points: Array [1..3] of TPoint;
…
points[1].X:=10; points[1].Y:=10;
points[2].X:=30; points[2].Y:=70;
points[3].X:=80; points[3].Y:=40;
Form1.Canvas.Polygon(points);
В приведенном примере треугольник не закрашивается. Для его закраски (а также любой фигуры) используется метод FloodFill. Он закрашивает область текущей кистью, начиная с точки, передаваемой в него в качестве параметра.
Код:
//Берем кисть красного цвета
Form1.Canvas.Brush.Color:=RGB(255, 0, 0);
//Закрашиваем
Form1.Canvas.FloodFill(12, 12, RGB(0, 0, 0), fsBorder);
Если последний параметр равен fsBorder, то заполнение цветом идет до тех пор, пока наша волна закраски не упрется в границу, заданную вторым параметром. Если же он равен fsSurface, то закрашиваться будут именно точки с цветом, задаваемым вторым параметром (начиная от точки, определяемой первыми двумя параметрами).
Кроме линий, можно выводить и отдельные точки.
Вот пример:
//Выводим точку красного цвета
Form1.Canvas.Pixels[9, 9]:=RGB(255, 0, 0);
Вообще говоря, рисовать можно не только на форме. Но об этом как-нибудь в следующий раз.
Всё на этом урок закончен.