logo search
Программирование в среде Delphy / Программирование в среде Delphi

21.1. Класс Tcanvas

Основу графики в Delphi представляет класс Tcanvas – это холст (контекст GDI в Windows) с набором инструментов для рисования. Основные свойства холста:

Property Pen:Tpen; – карандаш;

Property Brush:Tbrush; – кисть;

Property Font:Tfont; – шрифт;

Property PenPos:Tpoint; – текущая позиция карандаша в пикселях относительно левого верхнего угла канвы;

Property Pixels[x,y:Integer]:Tcolor. – массив цветов холста;

Property CopyMode:TcopyMode; – свойство, которое определяет, как графический рисунок копируется в канву. Оно используется при вызове метода CopyRect и при копировании объектов TbitMap. Возможные значения этого свойства:

o cmBlackness

– заполнение области рисования черным цветом;

o cmDest

– заполнение области рисования цветом фона;

o cmMergeCopy

– объединение изображения на канве и копируемого изображения с помощью операции AND;

o cmMergePaint

– объединение изображения на канве и копируемого изображения с помощью операции OR;

o cmNotSrcCopy

– отображение на канве инверсного изображения источника;

o cmNotSrcErase

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

o cmPatCopy

– копирование шаблона источника;

o cmPatInvert

– объединение шаблона источника с изображением на канве с помощью операции XOR;

o cmPatPaint

– объединение инверсного изображения источника с исходным шаблоном с помощью операции OR, а затем объединение результата этого действия с изображением на холсте, используя ту же логическую операцию;

o cmSrcAnd

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

o cmSrcCopy

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

o cmSrcErase

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

o cmSrcInvert

– объединение изображения на канве и источнике с помощью операции XOR. Отметим, что повторное объединение восстанавливает первоначальное изображение на канве. Это значение свойства CopyMode используется при создании игр, когда происходит движение объекта по фону;

o cmSrcPaint

– объединение изображения на канве и источнике с помощью операции OR;

o CmWhiteness

– заполнение области рисования белым цветом.

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

Методы канвы:

Pгосеdure Агс(Х1, Y1, Х2, Y2, ХЗ, Y3, Х4, Y4: Integer); – чертит дугу эллипса в охватывающем его прямоугольнике (X1, Y1)– (Х2, У2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (ХЗ, Y3), а конец – на пересечении с лучом из центра в точку (Х4, У4). Дуга чертится против часовой стрелки (рис.21.1,а);

Рис. 21.1. Параметры обращения к методам: а) Аrс; б) Сhоrd; в) Рiе;

г) RоundRect

Proсеdure Сhord(Х1, Y1, Х2, Y2, ХЗ, Y3, Х4, Y4:Integer) ; – чертит сегмент эллипса в охватывающем его прямоугольнике (XI, VI) – (Х2, У2). Начало дуги сегмента лежит на пересечении эллипса и луча, проведенного из его центра в точку (ХЗ, Y3), а конец – на пересечении с лучом из центра в точку (Х4, У4), Дуга сегмента чертится против часовой стрелки, а начальная и конечная точки дуги соединяются прямой (рис. 21.1,б);

Procedure CopyRect(Dest: Trect; Canvas: Tcanvas; Source: Trect); – копирует изображение Source канвы Canvas в участок Dest текущей канвы. При этом свойство CopyMode определяет различные эффекты копирования;

Pгосеdurе Draw(Х, Y: Integer; Graphic: ТGraphic); – осуществляет вывод на канву графического объекта Gгарhiс так, чтобы левый верхний угол объекта расположился в точке (X, Y);

Pгосеdure Е11iрsе(Х1, Y1, Х2, Y2: Integer); – чертит эллипс в охватывающем его прямоугольнике (X1, Y1) – (Х2, Y2), заполняет внутреннее пространство эллипса текущей кистью;

Pгосеdure FillRect(соnst Rect: Trect); – заполняет текущей кистью прямоугольную область Rect, включая ее левую и верхнюю границы, но не затрагивая правую и нижнюю границы;

Pгосеdure FloodFill(X, Y: Integer; Со1ог: ТСо1ог; FillStyle: TFillStyle); – производит заливку канвы текущей кистью. Заливка начинается с точки (X, У) и распространяется во все стороны от нее. Если FillStyle= fsSurface, заливка распространяется на все соседние точки с цветом Со1ог. Если FillStyle=fsBorder, наоборот, заливка прекращается на точках с этим цветом;

Pгосеdure FrameRect(соnst Rect:TRect) ; – очерчивает границы прямоугольника Rect текущей кистью толщиной в 1 пиксель без заполнения внутренней части прямоугольника;

Pгосedure LineТо (X, У: Integer); – чертит линию от текущего положения пера до точки (X, У);

Procedure МоvеТо(Х, У: Integer) ; – перемещает карандаш в положение (X, У) без вычерчивания линий;

Procedure Рiе(Х1, У1, Х2, У2, ХЗ, УЗ, Х4, У4: Integer); – рисует сектор эллипса в охватывающем прямоугольнике (X1, У1) – (Х2, Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (ХЗ, УЗ), а конец – на пересечении с лучом из центра в точку (Х4, У4). Дуга чертится против часовой стрелки. Начало и конец дуги соединяются прямыми с ее центром (см. рис. 21.1,в);

Pгосedure Ро1уgоn (Роints: аггау оf ТРоint) ; – вычерчивает карандашом многоугольник по точкам, заданным в массиве Роints. Конечная точка соединяется с начальной, и многоугольник заполняется кистью. Для вычерчивания без заполнения используется метод Ро1уline;

Pгосedure Ро1у1inе (Роints: array оf ТРоint) ; – вычерчивает карандашом ломаную прямую по точкам, заданным в массиве Роimts;

Pгосedure Rectangle (X1, У1, Х2, У2: Integer); – вычерчивает и заполняет прямоугольник (X1, У1) – (Х2, У2). Для вычерчивания без заполнения используется методы FrameRect или Ро1уLine;

Prосedure ReFresh; – устанавливает в канве умалчиваемые шрифт, карандаш и кисть;

Pгосedure RoundRect (Х1, У1, Х2, У2, ХЗ, УЗ: Integer) ; – вычерчивает и заполняет прямоугольник (XI, У1) – (Х2, У2) со скругленными углами. Прямоугольник (X1, Y1) – (ХЗ, УЗ) определяет дугу эллипса для округления углов (рис.22.1,г);

Pгосedure StretchDraw (const Rect: TRect; Graphic: TGraphic ) ; – отображает и при необходимости масштабирует графический объект Graphic так, чтобы он полностью занял прямоугольник Rect;

Procedure ТехtОut (Х, У: Integer; const Техt: String) ; – выводит текстовую строку Техt так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (X, У);

Procedure ТехtRect (Rect: ТRect; X, У: Integer; const Техt: String) ; – выводит строку Техt так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (X, У). Если при этом какая–либо часть надписи выходит из границ прямоугольника Rect, она отсекается и не будет видна.