Чтение онлайн

на главную - закладки

Жанры

Шрифт:
...

Function CreateFontlndirect(const If: LOGFONT): HFONT;

Параметр If содержит описание характеристик логического шрифта. Если функция завершается успешно, то она возвращает дескриптор логического шрифта. В противном случае ее результатом является nil.

После создания шрифта выбираем его в контексте устройства.

...

hOldFont:= SelectObject(hCurDC, hCurFont);

Далее устанавливаем режим прозрачности, то есть такой режим, при котором будет выводиться только текст без предварительной заливки фона определенным цветом.

...

nOldMode:= SetBkMode(hCurDC, TRANSPARENT);

Функция SetBkMode служит для установки режима смешивания фона определенного контекста устройства. Этот режим используется для текста, штриховых кистей, а также для карандашей со стилем, отличным от сплошных линий.

Формат заголовка данной функции следующий:

...

Function SetBkMode(hdc: HDC; nBkMode: Integer): Integer;

• hdc – задает описатель контекста устройства, для которого устанавливается режим смешивания фона;

• nBkMode – определяет режим смешивания фона, может принимать одно из значений, указанных в табл. 6.3.

Таблица 6.3. Режимы смешивания фона

Если функция завершается успешно, то она возвращает предыдущий установленный режим смешивания фона. В противном случае она возвращает ноль.

Стоит отметить, что данная функция оказывает эффект на стили линий, которые рисуются с использованием карандаша, созданного посредством функции CreatePen. Если карандаш создан при помощи функции ExtCreatePen, то никакого эффекта не будет.

Параметр nBkMode может быть установлен и в другие значения, отличные от указанных, которые специфичны для данного драйвера устройства. GDI передает драйверу устройства полученное специфическое значение.

Теперь необходимо установить определенный цвет текста при помощи функции SetTextColor для нашего контекста устройства.

...

SetTextColor(hCurDC, RGB(0, 0, 255));

Данная функция имеет следующий формат заголовка:

...

Function SetTextColor(hdc: HDC; crColor: COLORREF): COLORREF;

Первый параметр задает контекст устройства, для которого устанавливается цвет текста. Второй параметр задает сам цвет, который необходимо установить. В качестве результата функция возвращает предыдущий установленный цвет, но в случае неудачного завершения она возвращает CLRINVALID.

Цвет текста используется при рисовании изображения каждого символа при помощи функций 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. Результат работы приложения «Работа с текстом»

6.8. Работа с растровыми изображениями

Вы можете использовать точечный рисунок, чтобы запомнить изображение, а потом сохранить его в памяти, отобразить в другом месте окна вашего приложения или вообще в другом окне.

В некоторых случаях вы можете захотеть, чтобы ваше приложение запоминало и хранило изображение только временно. Например, когда вам необходимо промасштабировать его в каком-нибудь приложении для рисования. Для этого необходимо временно запомнить нормальное представление изображения и показать измененное. После того как пользователь опять выберет нормальное представление изображения, приложение будет обязано заменить промасштабированное изображение копией нормального, которое временно сохранено.

Чтобы временно запомнить изображение, вашему приложению необходимо вызвать функцию CreateCompatibleDC, чтобы создать контекст устройства памяти, совместимый с контекстом устройства экрана текущего окна. После этого вы создаете точечный рисунок с соответствующими атрибутами посредством вызова функции CreateCompatibleBitmap, а затем выбираете его в контексте устройства памяти уже известным вам образом.

После того как создан совместимый контекст устройства и выбран соответствующий точечный рисунок, вы можете запоминать изображение. Функция BitBlt получает изображение, а также копирует данные из исходного точечного рисунка и помещает их в точечный рисунок приемника. Однако два параметра функции не являются описателями точечных рисунков. Вместо этого функция получает два описателя контекстов устройств и копирует растровые данные из точечного рисунка, выбранного в исходном контексте устройства, в точечный рисунок, выбранный в целевом контексте устройства. В этом случае целевой контекст устройства является совместимым контекстом устройства. Когда копирование растровых данных завершается, изображение помещается в память. Чтобы восстановить изображение, вызовите повторно BitBlt, указав теперь в качестве источника совместимый контекст устройства и в качестве приемника контекст устройства экрана (принтера и т. д.).

Поделиться:
Популярные книги

Государь

Мазин Александр Владимирович
7. Варяг
Фантастика:
альтернативная история
8.93
рейтинг книги
Государь

Инженер Петра Великого 4

Гросов Виктор
4. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого 4

Бродяга. Книга вторая

Первухин Андрей Евгеньевич
2. Бродяга
Фантастика:
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Бродяга. Книга вторая

Древесный маг Орловского княжества 4

Павлов Игорь Васильевич
4. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 4

Наследие Маозари 5

Панежин Евгений
5. Наследие Маозари
Фантастика:
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Наследие Маозари 5

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Имперец. Том 4

Романов Михаил Яковлевич
3. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 4

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ермак. Регент

Зодчий. Книга IV

Погуляй Юрий Александрович
4. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Зодчий. Книга IV

Gloster Gladiator

Иванов С. В.
72. Война в воздухе
Научно-образовательная:
история
военная техника и вооружение
военная история
5.00
рейтинг книги
Gloster Gladiator

Андер Арес

Грехов Тимофей
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Андер Арес

РАЗОБЛАЧЕНИЕ МАГИИ, или Настольная книга шарлатана

Гагин Тимур Владимирович
Научно-образовательная:
культурология
5.00
рейтинг книги
РАЗОБЛАЧЕНИЕ МАГИИ, или Настольная книга шарлатана