// Canvas.Font.Handle. Параметры fdwItalic, fdwUnderline
// и fdwStrikeOut, согласно справке, могут принимать
// значения True или False, но имеют тип DWORD. Для
// С/C++ это не имеет значения — целый и логический типы
// в этих языках совместимы. Но в Delphi приходится
// использовать 0 и 1 вместо True и False. Угол поворота
// шрифта задается в десятых долях градуса, т. е.
// значение 600 означает 60 градусов.
Canvas.Font.Handle:= CreateFont(60, 0, 600, 600, FW_NORMAL, 0, 0, 0,
ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_РIТСН, 'Times New Roman');
Canvas.TextOut(140, 320, 'Sample');
// Эта строка нужна для того, чтобы пример работал
// корректно в BDS2006 и выше. В этой версии у класса
// TFont появилось свойство Orientation, задающее
// направление текста, и этот класс научился определять
// и сохранять это направление даже в том случае, если
// оно было задано функцией GDI, а не через свойство
// Orientation. Чтобы этого не происходило, нужно снова
// придать шрифту горизонтальное направление. В версиях
// Delphi, более ранних, чем BDS 2006, эта строка
// не нужна: при изменении шрифта через класс TFont
// направление текста и так станет горизонтальным.
Canvas.Font.Handle:= Create Font(60, 0, 0, 0, FW_NORMAL, 0, 0, 0,
ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH, 'Times New Roman');
Новый шрифт создается функцией CreateFont
SelectObject
) и вывести надпись. Затем в устройстве следовало бы выбрать другой шрифт, а созданный ранее удалить. Но т. к. VCL мы все же используем, можно поступить проще: присвоить созданный дескриптор свойств Canvas.Font.Handle
, а все остальное сделают классы TCanvas
и TFont
.Вообще говоря, при использовании GDI нет нужды каждый раз заново создавать шрифт или любой другой объект, когда они понадобятся. Создать их можно один раз, а затем указать в программе сохраненный дескриптор везде, где это необходимо.
Функция CreateFont