Шаг 40.
Графические инструменты в Delphi. Методы класса TCanvas

    На этом шаге мы рассмотрим состав класса TCanvas, в частности, остановимся на его методах.

    Канва содержит методы-надстройки над всеми основными функциями рисования GDI Windows, которые приведены ниже в таблице. При их рассмотрении имейте в виду, что все геометрические фигуры рисуются текущим пером. Те из них, которые можно закрашивать, закрашиваются с помощью текущей кисти. Кисть и перо при этом имеют текущий цвет.

   
Таблица 1. Методы класса TCanvas
Метод Описание
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.




Предыдущий шаг Содержание Следующий шаг