На этом шаге мы рассмотрим состав класса TCanvas, в частности,
остановимся на его методах.
Канва содержит методы-надстройки над всеми основными функциями рисования GDI Windows, которые приведены ниже в таблице. При их рассмотрении имейте в виду, что все геометрические фигуры рисуются текущим пером. Те из них, которые можно закрашивать, закрашиваются с помощью текущей кисти. Кисть и перо при этом имеют текущий цвет.
Метод | Описание |
---|---|
procedure Arc (X1, Y1, X2, Y2, ХЗ, Y3, Х4, Y4: Integer); | Чертит дугу эллипса в охватывающем прямоугольнике (X1,Y1)-(X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (ХЗ, Y3), а конец - на пересечении с лучом из центра в точку (Х4, Y4). Дуга чертится против часовой стрелки. |
procedure BrushCopy (const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor); | Копирует часть изображения Source на участок канвы Dest. Color указывает цвет в Dest, который должен заменяться на цвет кисти канвы. Метод введен для совместимости с ранними версиями Delphi. Вместо него следует пользоваться классом ТImageList. |
procedure Chord (X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); | Чертит сегмент эллипса в охватывающем прямоугольнике (X1,Y1)-(X2,Y2). Начало дуги сегмента лежит на пересечении эллипса и луча, проведенного из его центра в точку (X3, Y3), а конец - на пересечении с лучом из центра в точку (X4, Y4). Дуга сегмента чертится против часовой стрелки, а начальная и конечная точки дуги соединяются прямой. |
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 (X1, Y1, X2, Y2: Integer); | Чертит эллипс в охватывающем прямоугольнике (X1,Y1)-(X2,Y2). Заполняет внутреннее пространство эллипса текущей кистью. |
procedure FillRect (const Rect: TRect); | Заполняет текущей кистью прямоугольную область Rect, включая ее левую и верхнюю границы, но не затрагивая правую и нижнюю границы. |
procedure FloodFill (X, Y: Integer; Color: TColor; FillStyle: 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 (X1, Y1, X2, Y2, X3, Y3, X4, Y4: LongInt); | Рисует сектор эллипса в охватывающем прямоугольнике (X1, Y1) - (X2, Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (X3, Y3), а конец - на пересечении с лучом из центра в точку (X4, Y4). Дуга чертится против часовой стрелки. Начало и конец дуги соединяются прямыми с ее центром. |
procedure Polygon (Points: array of TPoint); | Вычерчивает пером многоугольник по точкам, заданным в массиве Points. Конечная точка соединяется с начальной и многоугольник заполняется кистью. Для получения незаполненного многоугольника используйте метод Polyline. |
procedure Polyline (Points: array of TPoint); | Вычерчивает пером ломаную линию по точкам, заданным в массиве Points. |
procedure Rectangle (X1, Y1, X2, Y2:Integer); | Вычерчивает и заполняет прямоугольник (X1, Y1) -(X2, Y2). Для вычерчивания без заполнения используйте методы FrameRect или Polyline. |
procedure Refresh; | Устанавливает в канве умалчиваемые шрифт и кисть. |
procedure RoundRect (X1, Y1, X2,Y2, X3, Y3: Integer) ; | Вычерчивает и заполняет прямоугольник (X1,Y1) - (X2, Y2) со скругленными углами. Прямоугольник (X1, Y1) - (X3, Y3) определяет дугу эллипса для округления углов. |
procedure StretchDraw (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 так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (X, Y). Если при этом какая-либо часть надписи выходит из границ прямоугольника Rect, она отсекается и не будет видна. |
function TextWidth (const Text: String): Integer; | Возвращает ширину прямоугольника, охватывающего текстовую строку Text. |
function TryLock: Boolean; | Пытается заблокировать канву. Если она не заблокирована другим потоком команд, то значение функции равно True, в противном случае ничего не делает и возвращает False. |
procedure Unlock; | Уменьшает на 1 счетчик блокировок канвы. |
Метод
procedure Refresh;
сбрасывает текущие шрифт, перо и кисть, заменяя их на стандартные, заимствованные из Windows (BLACK_PEN, HOLLOW_BRUSH, SYSTEM_FONT). Предусмотрено два события для пользовательской реакции на изменение канвы:
property OnChange: TNotifyEvent; property OnChanging: TNotifyEvent; .
Эти события возникают при изменениях свойств и вызовах методов TCanvas, меняющих вид канвы (то есть при любом рисовании; в MoveTo, например, они не возникают). Отличие их в том, что OnChanging вызывается до начала изменений, а OnChange - после их завершения.
Идентификатор (код) растровой операции при копировании прямоугольных блоков содержится в свойстве:
property CopyMode: TCopyMode;
TCopyMode = LongInt; .
Он определяет правило сочетания пикселей, копируемых на канву, с ее текущим содержимым. При этом можно создавать разные изобразительные эффекты. Их значения перечислены в таблице 2. Значением CopyMode по умолчанию является cmSrcCopy - копирование пикселей источника поверх существующих.
Помимо графических примитивов, таких как линии и фигуры, на канве можно разместить готовые изображения. Для их описания создан класс TGraphic.
На следующем шаге мы рассмотрим состав класса TGraphic.