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

Присваиваем его дескриптор шрифту канвы


procedure TForm1.FormPaint(Sender: TObject);
var   X: Integer;   LF: TLogFont;   Fnt: HFont; const   Text = 'Лучшая в мире система программирования'; 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;     // Выводим текст под углом +45 градусов
    TextOut(0, 300, Text);
    X := TextWidth(Text);
    DeleteObject(Fnt);
  // Удаляем ненужный шрифт
    // Изменяем параметры шрифта
    with LF do
    begin       lfHeight := 90;       lfEscapement := -900;       lfWeight := fw_Heavy;       StrPCopy(LF.lfFaceName, 'Arial Cyr');
    end;     Fnt := CreateFontIndirect(LF);
// Создаем новый шрифт     Font.Handle := Fnt;     Font.Color := clRed;     // Выводим с наклоном -90 градусов
    TextOut(X-10, 10, 'Delphi 5');
    DeleteObject(Fnt);
// Удаляем ненужный шрифт   end; end;
Параметр Format функции DrawText может содержать один или несколько флагов (табл. 2.)
Таблица 2. Возможные значения параметра Format функции DrawText



Флаг
Назначение
dt_Bottom Текст прижимается к нижней части области Rect
dt_CalcRect Разрешает динамически изменять размеры области Rect
dt_Center Текст центрируется по горизонтали
dt_EditControl Функция дублирует свойства отображения многострочного тестового редактора. В частности, таким же способом вычисляется средняя ширина символа и не показывается частично видимая последняя строка
dt_ExpandTabs Символы табуляции заменяются пробелами
dt_ExternalLeading В высоту строки включается высота межстрочного интервала
dt_Left Текст прижимается к левой части области Rect
dt_NoClip Текст не отсекается границами Rect
dt_NoPrefix Символы & не заменяются подчеркиванием
dt_Right Текст прижимается к правой части области Rect
dt_SingleLine Весь текст выводится единственной строкой, символы EOLN игнорируются
dt_TabsStop Символы табуляции не заменяются пробелами
dt_Top Текст прижимается к верхней части области Rect
dt_VCenter Текст центрируется по вертикали
dt_WordBreak Разрешает переход на новую строку при достижении правой границы Rect; разрыв строки — на границе слова; символы EOLN также переводят вывод на следующую строку
<
Если установлен флаг dt_CalcRect, функция изменяет высоту и ширину прямоугольника таким образом, чтобы вывести весь текст. Если выводится несколько строк, ширина вывода не меняется. Функция возвращает истинную высоту прямоугольника вывода.
Параметр Options функции ExtTextOut может быть комбинацией следующих значений:
eto_Clipped — текст будет отсекаться границами Rect;
eto_Gliph_Index — блокирует обработку языковым драйвером;
eto_Opaque — фон перерисовывается заново;
eto_RTLReading — вывод для чтения справа налево.
При выводе текста стандартными методами TCanvas всегда заново прорисовывается фон символов (цвет фона возвращает функция GetBkColor). Если цвет фона символов отличается от фона канвы, вывод сопровождается неприятными побочными эффектами. Если в примере из листинга 6 для формы оставить стандартный цвет clFaceBtn, окно вывода будет таким, как на рис. 3.

Рис. 3. Эффект прорисовки фона символов
Конечно, с помощью функции SetBkColor можно установить, чтобы цвет формы совпадал с цветом канвы, однако это не всегда возможно. Для примера на рис. 4. показан экран, который традиционно создают многие программы установки Setup.exe. Фон на таком экране не остается постоянным, а плавно переходит от интенсивного синего к черному. Ясно, что установить переменный цвет функцией SetBkColor невозможно. Более того, заглавные надписи программ Setup.exe также традиционно выводятся утолщенным наклонным шрифтом Times New Roman белыми буквами с черной тенью. Реализовать подобный эффект достаточно просто. Так, нужно вообще отказаться от прорисовки фона, установив с помощью функции SetBkMode режим Transparent, и вывести надпись дважды: первый раз черным цветом, а второй — белым, сместив вторую надпись немного влево и вверх относительно первой. Листинг 7 иллюстрирует сказанное (Setup.dpr)

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