Разнообразим вывод сообщений
Все богатство изобразительных возможностей Windows вовсе не исчерпывается набором свойств и методов класса TCanvas: этот класс инкапсулирует лишь наиболее популярные приемы работы с чертежными инструментами. В табл. 1 перечислены некоторые функции Windows, которые не инкапсулирует класс TCanvas и способны значительно разнообразить текстовый вывод (именно он наиболее обеднен узкими рамками TCanvas).
Таблица 1. Некоторые текстовые функции Windows API
type
TLogFont = record lfHeight: Integer; lfWidth: Integer; lfEscapment: Integer; lfOrientation: Integer; lfWeight: Integer; lfItalic: Byte; lfUnderline: Byte; lfStrikeOut: Byte; lfCharSet: Byte; lfOutPrecision: Byte; lfClipPrecision: Byte; lfQuality: Byte; lfPitchAndFamily: Byte; lfFaceName: PChar; end; function CreateFont(Font: TLogFont): hFont; | Создает новый шрифт на основе данных в параметре Font (назначение полей структуры TLogFont см. в тексте после таблицы) |
| |
function
DrawText(DC: hDC; pText: PChar; var Rect: TRect; Format: Wodr): Integer; | В прямоугольнике Rect выводит многострочный текст, на который указывает pText. Параметр Format используется для форматирования (см. ниже) | ||
function
ExtTextOut(DC: hDC; X, Y: Integer; Options: Integer; Rect: TRect; pText: PChar; Count: Integer; PX: PInteger): Bool; | Выводит текст с нестандартными межсимвольными расстояниями: X, Y — верхняя левая точка текста; Options — параметр, управляющий выводом (см. ниже); Rect — ограничивающий прямоугольник; pText — указатель на строку вывода; Count — количество выводимых символов; PX — указатель на массив целочисленных значений, определяющих межсимвольные расстояния: 1-й параметр — расстояние от 1-го до 2-го символа; 2-й параметр — расстояние от 2-го до 3-го символа и т.д.; если какой-то параметр равен 0, используется умалчиваемое межсимвольное расстояние | ||
function
GetBkColor(DC: hDC): TColor; | Возвращает цвет фона | ||
function
GetBkMode(DC: hDC): Integer; | Возвращает режим прорисовки фона: Opaque — фон прорисовывается заново при выводе текста; Transparent — фон не прорисовывается. | ||
function
GetTextAlign(DC: hDC): Integer; | Возвращает выравнивание текста | ||
function
GetTextCharacterExtra(DC: hDC): Integer; | Возвращает межсимвольное расстояние | ||
function
SetBkColor(DC: hDC; Color: TColor): TColor; | Устанавливает новый цвет фона и возвращает старый, если обращение успешно | ||
function
SetBkMode(DC: hDC; Mode: Integer): Integer; | Устанавливает новый режим прорисовки фона и возвращает старый, если операция успешна | ||
function
SetTextAlign(DC: hDC; Flags: Integer): Integer; | Устанавливает новое выравнивание текста и возвращает старое, если вызов успешен | ||
function
SetTextCharacterExtra(DC: hDC; CharExtra: Integer): Integer; | Устанавливает новое межсимвольное расстояние и возвращает старое, если вызов успешен |
Отдельные поля структуры TLogFont для функции CreateFontIndirect имеют следующий смысл:
lfHeight — высота шрифта в пунктах (1 пункт = 1/72 дюйма); если больше 0 — определяет высоту «знакоместа» (с учетом выступающих над заглавным символом элементов в буквах Ё, Й); если меньше 0 — определяет высоту «чистого» символа, если равно 0 — высоту выбирает Windows;
lfWidth — средняя ширина символа; если равно 0 — ширину устанавливает Windows;
lfEscapment — угол наклона базовой линии текста в десятых долях градуса относительно горизонтального направления; положительные значения — поворот по часовой стрелки; в Windows 95/98 совпадает с lfOrientation;
lfOrientation — угол наклона символов по отношению к базовой линии; в Windows NT для шрифтов True Type может отличаться от lfEscapment; для этого следует установить режим устройства отображения равным gm_Advanced (по умолчанию устанавливается gm_Compatible);
lfWeight — плотность шрифта (fm_DontCare=0 — плотность выбирает Windows; fm_Thin=100 — очень тонкий шрифт; fm_ExtraLight=200 — очень светлый; fm_Light=300 — светлый; fm_Normal=400 — нормальный; fm_Medium=500 — утолщенный; fm_SemiBold=600 — полужирный; fm_Bold=700 — жирный; fm_ExtraBold=800 — усиленный; fm_Heavy=900 — тяжелый);
lfItalic, lfUnderline, lfStrikeOut — ненулевое значение означает соответственно наклонный, перечеркнутый и подчеркнутый шрифт;
lfCharSet — набор символов (ANSI_CharSet=0; Default_CharSet=1; Symbol_CharSet=2; ShiftJis_CharSet=128; OEM_CharSet=255);
lfOutPrecision — точность представления шрифта; рекомендуется Out_TT_Prec (выбирает True Type и векторные шрифты, если есть несколько разновидностей одноименных шрифтов) или Out_TT_Only_Prec (только True Type);
lfClipPrecision — определяет точность отсечения надписи границами области прорисовки (Clip_Character_Precis, Clip_Embedded, Clip_Mask, Clip_TT_Always, Clip_Default_Precis — рекомендуется, Clip_LH_Angles, Clip_Stroke_Precis);
lfQuality — определяет качество прорисовки (Default_Quality, Draft_Quality, Proof_Quality);
lfPitchAndFamily — в четырех младших разрядах указывается тип шрифта, в четырех старших — его семейство;
lfFaceName — имя гарнитуры шрифта.
На рис. 2 показан пример вывода наклонными шрифтами, созданными функцией CreateFontIndirect (CreateFont.dpr).
Рис. 2. Использование наклонных шрифтов
Как реализован этот пример, показано в листинге 6.