Читаем Delphi. Трюки и эффекты полностью

Листинг 6.2.

Обработчик события формы OnPaint

procedure TfmText.FormPaint(Sender: TObject);

var

hCurDC: HDC;

hCurFont, hOldFont: HFONT;

nOldMode: Integer;

sText: String;

begin

//получаем общий контекст устройства

hCurDC := GetDC(Handle);

//создаем шрифт из шаблона

hCurFont := CreateFontIndirect(LogFontData);

//выбираем созданный шрифт

hOldFont := SelectObject(hCurDC, hCurFont);

//устанавливаем новый режим вывода

nOldMode := SetBkMode(hCurDC, TRANSPARENT);

//устанавливаем цвет текста

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

//задаем текстовую строку

sText := \'Текст примера\

//выводим текст на экран

TextOut(hCurDC, Width div 2, Height div 2, PAnsiChar(sText),

Length(sText));

//восстанавливаем режим вывода

SetBkMode(hCurDC, nOldMode);

//восстанавливаем ранее выбранный шрифт

SelectObject(hCurDC, hOldFont);

//удаляем созданный шрифт

DeleteObject(hCurFont);

//освобождаем общий контекст устройства

ReleaseDC(Handle, hCurDC);

end;

Как можно легко заметить, обработчик co6biTHHOnPaint работает по той же схеме, что и в предыдущем примере. Изначально получаем контекст устройства, потом создаем необходимый графический объект и выбираем его вместо установленного по умолчанию. После чего восстанавливаются все атрибуты контекста устройства, а затем он освобождается. Теперь перейдем от общего к частному. Мы создаем логический шрифт на основании указанных характеристик при помощи функции CreateFontlndirect.

...

hCurFont:= CreateFontlndirect(LogFontData);

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

...

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.

Перейти на страницу:

Похожие книги

Забытое
Забытое

Захватывающая история Сиенны Престон продолжается во второй части головокружительной серии «Игра обмана».Семнадцатилетняя Сиенна не понаслышке знает о душевной боли и потерях. Но на этот раз всё по-другому: кто-то вмешался в воспоминания её возлюбленного, и теперь ей предстоит найти ответы.След ведёт её к сверкающим небоскрёбам и роскоши Рубекса, столицы Пасифики, где она проникает в правительственное Ведомство интеллекта и генетики. Но ответы получить не так-то просто, особенно когда её собственные воспоминания могут быть искажены. К счастью, рядом есть Зейн Райдер, готовый помочь ей сложить вместе кусочки головоломки. Его преданность и забота размывают границу между дружбой и чем-то большим.Когда Сиенна подбирается слишком близко к тёмным секретам Ведомства, её обвиняют в убийстве видного государственного деятеля, и ей приходится пуститься в бега. Как бы ни разрывалось сердце Сиенны в попытке понять, кого она любит, это всё вскоре перестаёт иметь значение — потому что единственное, что её сейчас ждёт, это смертный приговор.

Марина Козикова , Александр Степанович Грин , Марина Суржевская , Кристин Смит

Любовное фэнтези, любовно-фантастические романы / Проза / Классическая проза / Самиздат, сетевая литература / Технические науки / Любовно-фантастические романы