(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Вывод текста средствами API

Источник: delphiplus
Андрей Садовой

Автор: Андрей Садовой

Класс TCanvas в Delphi включает далеко не все возможности Windows по выводу текста. Например, нет средств вывода вертикального текста или вывода текста под углом. Рассмотрим средства API, позволяющие решить эту и некоторые другие проблемы. Замечу, что на полноту информации я не претендую и опускаю некоторые функции, которые я не применял в своей практике.

Начнем наше знакомство со средствами 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;

Отдельные поля записи TLogFont имеют следующий смысл:

LfHeight - высота шрифта в пунктах (1 пункт = 1/72 дюйма); если больше 0, определяет высоту "знакоместа" (с учетом выступающих над заглавным символом элементов в буквах Е, И), если меньше нуля - высоту "чистого" символа, если 0 - высоту выбирает Windows;

LfWidth - средняя ширина символа; если 0, ширину устанавливает Windows;

LfEscapment - угол наклона базовой линии текста в десятых долях градуса относительно горизонтального направления; положительные значения - поворот по часовой стрелке; отрицательное - против; в Windows 95/98 совпадает c 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_Bcld=700 - жирный;
fm_ExtraBold=800 - усиленный;
fm_Heavy=900 - тяжелый;

LfItalic, LfUnderiine, LfStrikeOut - ненулевое значение означает соответственно наклонный, перечеркнутый и подчеркнутый шрифт;

LfCharSet - набор символов:

ANSI_CharSet=0,
Default_CharSet=l,
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 - имя гарнитуры шрифта.

Следующий код показывает пример заполнения структуры LF типа TLogFont параметрами шрифта:

// Определяем параметры нового шрифта
FillChar(LF, SizeOf(LF), 0) ;
with LF do
  begin
    lfHeight := 20; // высота
    lfWeight := fw_Normal; // жирность
    lfUnderline := 1; // режим подчеркивания включен
    lfEscapement := 450; // выводим под 45 градусов к горизонтали
    StrPCopy(lfFaceName, 'Courier New Cyr'); // за базу берем шрифт Courier
  end;

Переменная LF должна быть до этого описана как TLogFont.

Сам шрифт создается примерно так (для формы Form1):

with Form1.Canvas do
  begin
    // Создаем шрифт
    Fnt := CreateFontIndirect(LF) ;
    // Присваиваем его дескриптор шрифту канвы
    Font.Handle := Fnt;   end

Переменная Fnt должна иметь тип HFont.

Приведу пример кода вывода текста под углом (метод Paint для формы Form1):

procedure TForm1.FormPaint(Sender: TObject);
var
  LF: TLogFont;
  Fnt: HFont;
const
  Text = 'Это текст, написанный методами API';
begin
  // Определяем параметры нового шрифта
  FillChar(LF, SizeOf(LF), 0) ;
  with LF do
    begin
      lfHeight := 20;
      lfWeight := fw_Normal;
      lfUnderline := 1;
      lfEscapement := 450;
      StrPCopy(lfFaceName, 'Courier New Cyr');
    end;
  with Form1.Canvas do
    begin
      // Создаем шрифт
      Fnt := CreateFontIndirect(LF) ;
      // Присваиваем его дескриптор шрифту канвы
      Font.Handle := Fnt;
      // Выводим текст
      TextOut(0, 300, Text);
      DeleteObject(Fnt); // Удаляем шрифт
    end;
end;

Надеюсь, приведенные примеры достаточно ясно отражают суть использования API для вывода текста. Функции работы с фоном я опустил и некоторые другие - не хочу писать о том, чего сам не использовал. Я написал компонент Дельфи, использующий API для вывода текста, который можно скачать ниже.

Ссылки по теме

Файлы для загрузки


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 02.06.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Enterprise Connectors (1 Year term)
Delphi Professional Named User
AutoCAD LT 2022 Commercial New Single-user ELD Annual Subscription
EMS SQL Management Studio for PostgreSQL (Business) + 1 Year Maintenance
IBM DOMINO ENTERPRISE CLIENT ACCESS LICENSE AUTHORIZED USER ANNUAL SW SUBSCRIPTION & SUPPORT RENEWAL
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Реестр Windows. Секреты работы на компьютере
СУБД Oracle "с нуля"
Вопросы и ответы по MS SQL Server
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100