Холст – класс TCanvas
Класс TCanvas связывает воедино дескриптор контекста устройства GDI и набор функций GDI. По сути, TCanvas является надстройкой над GDI Windows.
В классе инкапсулированы уже знакомые нам TBrush, TPen и TFont:
propertyBrush: TBrush;
propertyPen: TPen;
propertyFont: TFont;
Дескриптор графического устройства находится в свойстве:
propertyHandle: HDC;
Холст отличается богатейшим набором методов для рисования, но самый
простейший из них прячется в свойстве:
propertyPixels[X, Y: Integer]: TColor;
Благодаря свойству Pixels мы получим доступ к любой точке холста по ее координатам X и Y. При этом можно решить два вопроса: во-первых, узнать, какой цвет установлен для этой точки, и, во-вторых, самим назначить указанной точке требуемый цвет:
ifForm1.Canvas.Pixels[9,9]=clBlack thenForm1.Canvas.Pixels[9,9]:=clRed;
Текущая позиция пера:
propertyPenPos : TPoint;
Прямоугольник, ограничивающий область, предназначенную для рисования, доступен (только для чтения) в свойстве:
propertyClipRect : TRect;
Способ наложения изображения на холст определяется свойством:
propertyCopyMode: TCopyMode defaultcmSrcCopy;
typeTCopyMode = Longint;
Класс TCopyMode представляет собой константы кодов растровых операций.
Класс TCanvas может похвастаться двумя незначительно усовершенствованными потомками: TControlCanvas и TMetafileCanvas. Первый из них инкапсулируется в ряде элементов управления, допускающих операции прорисовки на своей поверхности. К таковым элементам относятся потомки TCustomForm, TGraphicControl, TCustomCombo и т. д. В свою очередь TMetafileCanvas специализируется на работе с метафайлами – векторными изображениями.
Вывод текста
Для вывода текста в заданных точках чаще всего используется метод:
procedureTextOut(X, Y: Integer; constText: string);
Параметрами X и Y задается начальная позиция строки в логических координатах. В эту точку помещается левый верхний угол первого символа выводимой строки. Большими возможностями обладает метод:
procedureTextRect(Rect: TRect; X, Y: Integer; constText: string);
Параметр Rect задает границы выводимого текста. Все, что не поместилось
в пределах прямоугольника Rect, останется невидимым.
varRct: TRect;
Begin
Rct.Left:=10; Rct.Top:=10; Rct.Right:=58; Rct.Bottom:=25;
Form1.Canvas.TextRect(Rct,10,10,'Функция TextRect');
end;
Совместно с TextRect() часто используют функции, возвращающие высоту и ширину строки в пикселах для текущего шрифта.
functionTextHeight(constText: string): Integer;
functionTextWidth(constText: string): Integer;
Функция TextExtent() вполне может заменить оба предыдущих метода:
functionTextExtent(constText: string): TSize;
typeTSize = record
cx: Longint;
cy: Longint;
end;
С особенностями вывода текста на графическое устройство тесно связано свойство холста:
propertyTextFlags: LongInt;
В свойстве инкапсулированы параметры функции Win32 API ExtTextOut(). Возможные значения флагов приведены в табл. 10.2.
Таблица 10.2. Основные флаги для свойства TextFlags
Константа | Описание |
ETO_CLIPPED | Флаг автоматически устанавливается при вызове метода TextRect().Строка выводится в границах заданного прямоугольника Rect. |
ETO_OPAQUE | Строка выводится с непрозрачным фоном. |
ETO_RTLREADING | Флаг предназначен для работы с ближневосточной письменностью (справа налево). |
ETO_GLYPH_INDEX | Текст выводится непосредственно средствами GDI без анализа языковой принадлежности; обычно используется совместно со шрифтами TrueType. |
Значительно больше возможностей по выводу текста предоставляет функция Windows API:
functionDrawText( HDC : hDC, // дескриптор контекста
Text : pChar, // содержимое текста
Count: Integer, // количество символов
Rect : pRect, // прямоугольная область для вывода текста
dtFormat : Cardinal // опции форматирования текста
): Integer;
По сравнению с простейшим методом TextOut() наша новая знакомая не допустит выхода текста за пределы границы прямоугольной области Rect. Параметр Count требует указать количество выводимых символов, но если вы передадите значение –1, то функция самостоятельно найдет нулевой символ, завершающий строку, и выведет ее всю. Параметр dtFormat определяет опции форматирования текста; некоторые его значения приведены в табл. 10.3.
Таблица 10.3. Опции форматирования текста метода DrawText()
Константа | Описание |
DT_BOTTOM | Выравнивание текста по нижней границе прямоугольника Rect. |
DT_TOP | Выравнивание по верхней границе. |
DT_RIGHT | Выравнивание вправо. |
DT_LEFT | Выравнивание влево. |
DT_VCENTER | Центрирование по вертикале. |
GT_CENTER | Центрирование по горизонтале. |
В случае успеха функция DrawText() возвращает высоту текста в пикселах, а при неудаче – ноль.
varRect : TRect;
S : string;
Begin
Rect.Left:=10; Rect.Top:=10;
Rect.Bottom:=Rect.Left+20;
Rect.Right:=100;
s:='ABCDEF'+#0;
DrawText(Form1.Canvas.Handle, pChar(s), -1, Rect, DT_CENTER);
end;
Дата добавления: 2016-03-15; просмотров: 604;