Читаем 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.

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

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

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Язык программирования Euphoria. Справочное руководство
Язык программирования Euphoria. Справочное руководство

Euphoria (юфо'ри, также рус. эйфори'я, ра'дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software) в Канаде, Торонто. Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана» с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib и оберток для wxWidgets, GTK+ и IUP. Euphoria имеет встроенную простую систему баз данных и обертки для работы с другими типам баз данных.[Материал из Википедии]

Коллектив авторов

Программирование, программы, базы данных