Delphi.Заметки программиста

       

Разнообразим вывод сообщений


Все богатство изобразительных возможностей 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_Char­Set=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.


Содержание раздела