Средства рисования в Lazarus
При разработке проекта, в котором можно рисовать, в распоряжении программиста находится полотно (холст) свойство Canvas, карандаш свойствоPen, и кисть свойствоBrush.
Свойством Canvas обладают следующие компоненты:
• форма (класс Tform);
• таблица (класс TSringGrid);
• растровая картинка (класс Timage);
• принтер (класс TPrinter).
При рисовании компонента, обладающего свойством Canvas, сам компонент
рассматривается как прямоугольная сетка, состоящая из отдельных точек, называемых пикселями. Положение пикселя характеризуется его вертикальной (X) и горизонтальной(Y) координатами. Левый верхний пиксель имеет координаты(0,0). Вертикальная координата возрастает сверху вниз, горизонтальная
слева направо. Общее количество пикселей по вертикали определяется свойством Height, а по горизонтали свойствомWeight. Каждый пиксель может
иметь свой цвет. Для доступа к любой точке полотна используется свойство Pixels[X,Y]:TColor. Это свойство определяет цвет пикселя с координатами
X(integer), Y(integer).
Изменить цвета любого пикселя полотна можно с помощью следующего оператора присваивания:
Компонент . Canvas . P i x e l s [X,Y]:= Color ;
где Color переменная или константа типаTcolor.
Определены следующие константы цветов (табл. 10.1).
Цвет любого пикселя можно получить с помощью следующего оператора присваивания:
Color :=Компонент . Canvas . P i x e l s [X,Y ] ;
где Color переменная типаTcolor.
Класс цвета точки Tcolor определяется как длинное целоеlongint. Пере-
менные этого типа занимают в памяти четыре байта. Четыре байта переменных этого типа содержат информацию о долях синего (B), зелёного (G) и красного
(R) цветов и устроены следующим образом: $00BBGGRR.
Для рисования используются методы класса TСanvas, позволяющие изобра-
зить фигуру (линию, прямоугольник и т. д.) или вывести текст в графическом режиме, и три класса, определяющие инструменты вывода фигур и текстов:
•TFont (шрифты);
•TPen (карандаш, перо);
•TBrush (кисть).
Класс TFONT. Можно выделить следующие свойства соответствующего объекта Canvas.TFont:
•Name (типstring) имя используемого шрифта.
•Size (типinteger) размер шрифта в пунктах (points). Пункт это единица измерения шрифта, равная0,353 мм или1/72 дюйма.
•Style стиль начертания символов, который может быть обычным, полужирным (fsBold), курсивным (fsItalic), подчёркнутым (fsUnderline) и перечёркнутым (fsStrikeOut). В программе можно комбинировать необ-
ходимые стили, например, чтобы установить стиль ¾полужирный курсив¿ необходимо написать следующий оператор:
Объект . Canvas . Font . Style :=[ f s I t a l i c , fsBold ]
•Color (типTcolor) цвет символов.
•Charset (тип0..255) набор символов шрифта. Каждый вид шрифта,
определяемый его именем, поддерживает один или более наборов символов. В табл. 10.2 приведены некоторые значенияCharset.
Класс TPEN. Карандаш (перо) используется как инструмент для рисования точек, линий, контуров геометрических фигур. Основные свойства объекта
Canvas.TPen:
•Color (типTcolor) определяет тип линии;
•Width (типInteger) задаёт толщину линии в пикселях;
•Style даёт возможность выбрать вид линии. Это свойство может прини-
мать значение, указанное в таблице 10.3.
Mode определяет, каким образом взаимодействуют цвета пера и полотна.
Выбор значения этого свойства позволяет получать различные эффекты. Возможные значения Mode приведены в табл.10.4. По умолчанию вся линия вычерчивается цветом, определяемым значениемPen.Color, но можно
определять инверсный цвет линии по отношению к цвету фона. В этом случае независимо от цвета фона, даже если цвет линии и фона одинаков, линия будет видна.
Procedure PolyLine ( const Points array of TPoint ) ;
Метод PolyLine рисует ломаную линию, координаты вершин которой определяются массивомPoints.
Рассмотрим работу процедуры на примере. Расположим на форме кнопки Рисовать и Выход и запишем следующие операторы процедур обработки события:
procedure TForm1 . Button1Click ( Sender : TObject ) ;
var
temp : array
[ 1 . . 2 5 ] of TPoint ;
i
:
byte ;
j :
integer ;
begin
j :=1;
for
i :=1 to 25
do
begin
//вычисление координат вершин ломаной линии temp [ i ] . x:=25+( i −1) 10;
temp [ i ] . y:=150− j ( i−1) 5; j :=−j ;
end ;
Form1 . Canvas . P o l y l i n e ( temp ) ; end ;
procedure TForm1 . Button2Click ( Sender : TObject ) ; begin
Form1 . Close ; end ;
После запуска программы и щелчка по кнопке Рисовать окно формы будет выглядеть, как на рисунке 10.1.
Procedure E l l i p s e (X1 , Y1 , X2 , Y2 : Integer ) ;
Метод Ellipse вычерчивает на холсте эллипс или окружность.X1, Y1, X2, Y2 это координаты прямоугольника, внутри которого вычерчивается эллипс.
Если прямоугольник является квадратом, то вычерчивается окружность.
Procedure Arc (X1 , Y1 , X2 , Y2 , X3 , Y3 , X4 , Y4 : Integer ) ;
Метод Arc вычерчивает дугу эллипса.X1, Y1, X2, Y2 это координаты, определяющие эллипс, частью которого является дуга;X3, Y3 координаты, определяющие начальную точку дуги;X4, Y4 координаты, определяющие ко-
нечную точку дуги. Дуга рисуется против часовой стрелки.
Procedure Rectangle (X1 , Y1 , X2 , Y2 : Integer ) ;
Метод Rectangle рисует прямоугольник.X1, Y1, X2, Y2 координаты верх-
него левого и нижнего правого углов прямоугольника.
Procedure RoundRect (X1 , Y1 , X2 , Y2 , X3 , Y3 : Integer ) ;
Это метод вычерчивания прямоугольника со скруглёнными углами. X1, Y1, X2, Y2 координаты верхнего левого и нижнего правого углов прямоугольника, аX3, Y3 размер эллипса, одна четверть которого используется для вычерчи-
вания скругленного угла.
Procedure PolyGon ( const Points array of TPoint ) ;
Метод PolyGon рисует замкнутую фигуру (многоугольник) по множеству угловых точек, заданному массивомPoints. При этом первая точка соединяется прямой линией с последней. Этим методPolyGon отличается от методаPoliline,
который не замыкает конечные точки. Рисование осуществляется текущим пером Pen, а внутренняя область фигуры закрашивается текущей кистьюBrush.
Procedure Pie (X1 , Y1 , X2 , Y2 , X3 , Y3 , X4 , Y4 : Integer ) ; Метод Pie рисует замкнутую фигуру сектор окружности или эллипса
спомощью текущих параметров пера Pen, внутренняя область закрашивается текущей кистью Brush. Точки(X1,Y1) и(X2,Y2) задают прямоугольник, опи-
сывающий эллипс. Начальная точка дуги определяется пересечением эллипса
спрямой, проходящей через его его центр и точку (X3,Y3). Конечная точка ду-
ги определяется пересечением эллипса с прямой, проходящей через его центр и точку (X4,Y4). Дуга рисуется против часовой стрелки от начальной до ко-
нечной точки. Рисуются прямые, ограничивающие сегмент и проходящие через центр эллипса и точки (X3,Y3) и(X4,Y4).