Цвет текста используется при рисовании изображения каждого символа при помощи функций TextOut и ExtTextOut, а также для преобразования растрового изображения при конвертировании из цветного в монохромный режим.
Мы сделали все необходимые подготовки к выводу текста и теперь просто выводим его с центра нашей формы.
TextOut(hCurDC, Width div 2, Height div 2, PAnsiChar(sText), Length(sText));
Но для нас недостаточно обработки лишь события OnPaint. Поэтому поместим на форму таймер и установим интервал его срабатывания равным 100. А в обработчике будем менять атрибуты текста, которые задают угол его наклона при выводе. После чего заставляем сработать обработчик события OnPaint нашей формы посредством вызова функции RePaint (листинг 6.3).
Листинг 6.3.
Обработчик события таймера OnTimer
procedure TfmText.TurnTimerTimer(Sender: TObject);
begin
with LogFontData do
begin
lfEscapement := lfEscapement + 60;
lfOrientation := lfEscapement;
end;
RePaint;
end;
Переменная LogFontData объявлена следующим образом:
LogFontData: LOGFONT;
На основании ее мы создаем шрифт, которым выводится текст. Здесь мы изменяем только два ее поля, которые влияют на наклон текста при выводе. Все остальные параметры мы единожды заполняем при создании формы. Там же мы активизируем таймер (листинг 6.4).
Листинг 6.4.
Обработчик события формы OnCreate
procedure TfmText.FormCreate(Sender: TObject);
begin
with LogFontData do
begin
lfHeight := 30; // высота шрифта
lfWidth := 0; // средняя ширина символа
lfEscapement := 0; // наклон строки относительно оси oX
lfOrientation := 0; // наклон символа
// относительно оси oX
lfWeight := FW_BOLD; // вес шрифта
lfItalic := 0;
lfUnderline := 0;
lfStrikeOut := 0;
// кодовая страница по умолчанию
lfCharSet := DEFAULT_CHARSET;
lfOutPrecision := OUT_DEFAULT_PRECIS; // точность
// вывода
lfClipPrecision := CLIP_DEFAULT_PRECIS; // отсечение
// вывода
lfQuality := PROOF_QUALITY; // качество вывода
lfPitchAndFamily := VARIABLE_PITCH or FF_DONTCARE;
// семейство шрифта
lfFaceName := \'Arial\ // название шрифта
end;
TurnTimer.Enabled := True;
end;
Результат работы приложения можно увидеть на рис. 6.2.
Рис. 6.2. Результат работы приложения «Работа с текстом»
Вы можете использовать точечный рисунок, чтобы запомнить изображение, а потом сохранить его в памяти, отобразить в другом месте окна вашего приложения или вообще в другом окне.
В некоторых случаях вы можете захотеть, чтобы ваше приложение запоминало и хранило изображение только временно. Например, когда вам необходимо промасштабировать его в каком-нибудь приложении для рисования. Для этого необходимо временно запомнить нормальное представление изображения и показать измененное. После того как пользователь опять выберет нормальное представление изображения, приложение будет обязано заменить промасштабированное изображение копией нормального, которое временно сохранено.
Чтобы временно запомнить изображение, вашему приложению необходимо вызвать функцию CreateCompatibleDC, чтобы создать контекст устройства памяти, совместимый с контекстом устройства экрана текущего окна. После этого вы создаете точечный рисунок с соответствующими атрибутами посредством вызова функции CreateCompatibleBitmap, а затем выбираете его в контексте устройства памяти уже известным вам образом.