16.4.4. Класс TCanvas

Этот класс создает “канву”, на которой можно рисовать чертежными инструментами - пером, кистью и шрифтом. Объекты класса ЕСаnvas автоматически создаются для всех видимых компонентов, которые должны уметь нарисовать себя. Они инкапсулируют объекты Font, pen, Brush, а также многочисленные методы, использующие эти объекты.

Свойства класса:

property Brush: TBrush; property ClipRect: TRect;

Объект-кисть Определяет текущие размеры области, нуждающейся в прорисовке

property CopyMode: TCopyMode;

Устанавливает способ взаимодействия растрового изображения с цветом фона

property Font: TFont;

Объект-шрифт

property Handle: Integer;

Дескриптор канвы. Используется при непосредственном обращении к API-функциям Windows

property LockCount: In

tegers;

 

 

Счетчик блокировок канвы. Увеличивается на единицу при каждом обращении к методу Lock и уменьшается на единицу при обращении к Unlock

property Pen: TPen;

Объект-перо

property PenPos:TPoint;

Определяет текущее положение пера в пикселях относительно левого верхнего угла канвы

property Pixels[X,Y:Integer]: TColor;

Массив пикселей канвы

 

 

Свойство copyMode используется при копировании части одной канвы (источника) в другую (приемник) методом copyRect и может иметь одно из следующих значений:

cmBlackness

Заполняет область рисования черным цветом

cmDestInvert

Заполняет область рисования инверсным цветом фона

cmMergeCopy

Объединяет изображение на канве и копируемое изображение операцией and

cmMergePaint

Объединяет изображение на канве и копируемое изображение операцией OR

cmNotSrcCopy

Копирует на канву инверсное изображение источника

cmNotSrcErase 

Объединяет изображение на канве и копируемое изображение операцией OR и инвертирует полученное

cmPatCopy

Копирует образец источника

cmPatInvert

 

 

Комбинирует образец источника с изображением на канве с

помощью операции XOR

cmPatPaint

Комбинирует изображение источника с его образцом с помощью операции OR, затем полученное объединяется с изображением на канве также с помощью OR

cmSrcAnd 

 

Объединяет изображение источника и канвы с помощью операции AND

cmSrcCopy

Копирует изображение источника на канву

cmSrcErase

Инвертирует изображение на канве и объединяет результат с изображением источника операцией AND

cmSrcInvert

Объединяет изображение на канве и источник операцией XOR

cmSrcPaint

Объединяет изображение на канве и источник операцией OR

cmWhitness

Заполняет область рисования белым цветом

 С помощью свойства pixels все пиксели канвы представляются в виде двухмерного массива точек. Изменяя цвет пикселей, можно прорисовывать изображение по отдельным точкам.

Методы класса:

procedure Arc(X1, Y1, X2, Y2, ХЗ, Y3, Х4, Y4: Integer);

Чертит дугу эллипса в охватывающем прямоугольнике (Xl,Yl)-(X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (ХЗ, Y3), а конец - на пересечении с лучом из центра в точку (Х4, Y4). Дуга чертится против часовой стрелки (см. рис. 16.4, а)

procedure BrushCopy

(const Dest: TRect;

Bitmap: TBitmap;

const Source: TRect;

Color: TColor);

Копирует часть изображения Source на участок канвы Dest. Color указывает цвет в Dest, который должен заменяться на цвет кисти канвы. Метод введен для совместимости с ранними версиями Delphi. Вместо него следует пользоваться классом Т Image List

procedure Chord(XI,

Yl, X2, Y2, X3, Y3,

Чертит сегмент эллипса в охватывающем прямоуголь нике (XI, У1) - (X2, Y2). Начало дуги сегмента лежит на пересечении эллипса и луча, проведенного из его центра в точку (X3, Y3), а конец - на пересечении с лучом из центра в точку (X4, Y4). Дуга сегмента чертится против часовой стрелки, а начальная и конечная точки дуги соединяются прямой (см. рис. 16.4, б)

procedure CopyRect (Dest: TRect; Canvas: TCanvas;Source: TRect) ;

Копирует изображение Source канвы Canvas в участок Dest текущей канвы. При этом разнообразные специальные эффекты достигаются с помощью свойства CopyMode

procedure Draw(X, Y:Integer; Graphic:TGraphic) ;

Осуществляет прорисовку графического объекта Graphic так, чтобы левый верхний угол объекта расположился в точке (X, Y)

procedure DrawFocusRect (const Rect:TRect) ;

Прорисовывает прямоугольник с помощью операции XOR, поэтому повторная прорисовка уничтожает ранее вычерченный прямоугольник. Используется в основном для прорисовки нестандартных интерфейсных элементов при получении ими фокуса ввода и при потере его

procedure Ellipse(XI, Yl, X2,

Y2: Integers;

Чертит эллипс в охватывающем прямоугольнике (XI, Yl) - (X2, Y2). Заполняет внутреннее пространство эллипса текущей кистью

procedure FillRect(const Rect: TRect);

Заполняет текущей кистью прямоугольную область Rect, включая ее левую и верхнюю границы, но не затрагивая правую и нижнюю границы

procedure Flood-

Fill(X, Y: Integer;

Color: TColor; Fill Style: TFillStyle);

Производит заливку канвы текущей кистью. Залив

ка начинается с точки (X, Y) и распространяется вовсе стороны от нее. Если FillStyle=fsSurface, заливка распространяется на все соседние точки с цветом Color. Если FillStyle=fsBorder, наоборот, заливка прекращается на точках с этим цветом

procedure FrameRect(const Rect: TRect);

Очерчивает границы прямоугольника Rect текущей кистью толщиной в 1 пиксель без заполнения внутренней части прямоугольника

procedure LineTo(X,

Y: Integer);

Чертит линию от текущего положения пера до точки

(X,Y)

procedure Lock;

 

Блокирует канву в многопоточных приложениях для предотвращения использования канвы в других по токах команд

procedure MoveTo(X,Y: Integer);

Перемещает перо в положение (X, Y) без вычерчивания линий

procedure Pie(XI,

Yl, X2, Y2, X3, Y3,

X4, Y4: Longint);

 

Рисует сектор эллипса в охватывающем прямоугольнике (XI, Yl) - (X2, Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (X3, Y3), а конец - на пересечении случом из центра в точку (X4, Y4). Дуга чертится против часовой стрелки. Начало и конец дуги соединяются прямыми с ее центром (см. рис. 16.4, в)

procedure Polygon.

(Points: array of TPoint) ; 

 

Вычерчивает пером многоугольник по точкам, заданным в массиве Points. Конечная точка соединяется с начальной и многоугольник заполняется кистью. Без заполнения используйте - Polyline

procedure Polyline

(Points: array of

TPoint);

Вычерчивает пером ломаную прямую по точкам, заданным в массиве Points

 

 

procedure Rectan

gle(XI, Yl, X2, Y2:

Integer);

Вычерчивает и заполняет прямоугольник (XI, Yl) -S(X2, Y2). Для вычерчивания без заполнения используйте FrameRect или Polyline

procedure Refresh;

Устанавливает в канве умалчиваемые шрифт и кисть

procedure RoundRect(Xl, Yl, X2,Y2, X3, Y3: Inte ger) ;

Вычерчивает и заполняет прямоугольник (XI,Yl)- (X2, Y2) со скругленными углами. Прямоугольник (XI, Yl) - (X3, Y3) определяет дугу эллипса для округления углов (см. рис. 16.4, г)

procedure Stretch Draw (const Rect:TRect; Graphic:

TGraphic );

Вычерчивает и при необходимости масштабирует графический объект Graphic так, чтобы он полностью занял прямоугольник Rect

 

function TextExtent

(const Text:String): TSize;

Возвращает ширину и высоту прямоугольника, охватывающего текстовую строку Text

 

function TextHeight

(const Text: String): Integer;

Возвращает высоту прямоугольника, охватывающего текстовую строку Text 

 

procedure TextOut(X,

Y: Integer; const Text: String) ;

Выводит текстовую строку Text так, чтобы левый

верхний угол прямоугольника, охватывающего текст, располагался в точке (X, Y)

procedure TextRect(Rect: TRect; X, Y:

Integer; const Text:

String) ;

Выводит текстовую строку Text так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (х, Y). Если при этом какая-либо часть надписи выходит из границ прямоугольника Rect, она отсекается и не будет видна

function TextWidth

(const Text:String): Integer;

Возвращает ширину прямоугольника, охватывающего текстовую строку Text 

 

function TryLock:

Boolean; 

Пытается заблокировать канву. Если она не заблокирована другим потоком команд, - True, в противном случае ничего не делает и возвращает False

procedure Unlock;

Уменьшает на 1 счетчик блокировок канвы