Простейшие построения

Части, которые просто нельзя собрать неправильно,

все же будут собраны неправильно.

Из законов Мэрфи.

Построение изображений из программы основано на вызове методов объекта Canvas (по англ. "холст"). У объекта Image есть свойство Canvas, поэтому запись команд рисования выглядит примерно так:

Image1.Canvas.команда;

Принцип рисования в Delphi заключается в том, что картинка строится пером (pen), которое перемещается по холсту, проводя на нем линии. Кроме пера, у холста еще есть кисть (brush), которой можно закрашивать большие области. Наконец, имеются отдельные команды для построения отрезков, прямоугольников, эллипсов (окружность – частный случай эллипса). Давайте нарисуем изображение, показанное на рис. 2.

Рис. 2 – Пример изображения.

Прежде всего надо понимать, что размер нашего поля рисования в пикселах – величина переменная. Пользователь может растянуть форму, поменять разрешение экрана и т.д. Поэтому ширину поля рисования нужно брать из свойства Image1.Width, а высоту – из свойства Image1.Height.

Как и обычно, процедуру рисования будем писать так, чтобы она вызывалась при нажатии на кнопку. Для этого поместим на форму кнопку "Рисовать". Процедура рисования будет выглядеть следующим образом:

procedure TForm1.Button1Click(Sender: TObject);

Begin

WITH Image1.Canvas DO

BEGIN

Brush.Color:=clWhite;

Pen.Color:=clBlack;

FillRect(Image1.ClientRect);

MoveTo(0,Image1.Height DIV 2);

LineTo(Image1.Width,Image1.Height DIV 2);

MoveTo(Image1.Width DIV 2,0);

LineTo(Image1.Width DIV 2,Image1.Height);

Brush.Color:=clGreen;

Rectangle(Image1.Width DIV 2 - 50, Image1.Height DIV 2 - 50,

Image1.Width DIV 2 + 50, Image1.Height DIV 2 + 50);

Brush.Color:=clRed;

Ellipse(Image1.Width DIV 2 - 10, Image1.Height DIV 2 - 10,

Image1.Width DIV 2 + 10, Image1.Height DIV 2 + 10);

END

end;

Разберемся, что здесь написано. Оператор WITH "выносит за скобки" слова Image1.Canvas, чтобы их не приходилось писать в каждой строчке. Команды Brush.Color и Pen.Color задают будущие цвета заливки и контура, соответственно. Сами цвета обозначаются по их имени, перед которым идут буквы cl, например, clWhite, clRed, clGreen. Команда FillRect рисует закрашенный прямоугольник. Здесь она применена для очистки всего поля рисования, поэтому в качестве прямоугольника задается тот прямоугольник, который занимает весь объект Image1. Он хранится в свойстве ClientRect. Проще говоря, команда FillRect(Image1.ClientRect)заливает весь холст цветом заливки.

Рисование отрезка от точки x1,y1 в точку x2,y2 выполняется пером в два этапа. Сначала перо командой MoveTo(x1,y1) позиционируется без проведения линии в начальную точку отрезка, а затем отрезок проводится командой LineTo(x2,y2). Координаты начал и концов отрезков показаны на рис. 2, они легко вычисляются. Не забывайте, что координаты на экране могут быть только целыми, поэтому надо использовать операцию целочисленного деления DIV.

Команда Rectangle рисует прямоугольник с заданными цветами контура и заливки. Прямоугольник задается координатами концов любой его диагонали. В нашем случае длина стороны прямоугольника будет 20 пикселов и он строится симметрично относительно середины холста.

Команда Ellipse строит окружности и эллипсы. Параметры ее немного необычны – нужно указать координаты концов диагонали прямоугольника, в который будет вписан эллипс или окружность.

Порядок рисования фигур имеет значение. Если переставить местами команды Rectangle и Ellipse, то прямоугольник закроет собой окружность и вы ее никогда не увидите.

Помимо сплошной заливки, можно применять и другие ее виды (штриховка, точки и т.д.), меняя свойство Style объекта Brush:

Рис. 3 – Способы заливки.

Значение bsSolid соответствует сплошной заливке, bsClear – ее отсутствию, что позволяет рисовать незакрашенные фигуры.

Для линий свойство Pen.Style устанавливает вид линии:

psSolid сплошная линия
psDash пунктирная линия
psDot линия из точек
psDashDot штрих – пунктирная линия
psDashDotDot линия "тире – точка – точка"
psClear линия не рисуется (например, для построения объекта без контура)

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: