Размер шрифта
-
+

Программирование в Delphi. Трюки и эффекты - стр. 40

end;

WindowFunc:= S_OK; //Сообщение обработано

end;


Обработка сообщений здесь довольно проста, за исключением изменения шрифта текстового поля. Обратите внимание на следующий отрывок листинга 2.34:


//Замена шрифта в Edit

hOldFont:= HFONT(SendDlgItemMessage(hMainWnd,2001,WM_GETFONT, 0,0));

hCurFont:= CreateFontIndirect(font);

SendDlgItemMessage(hMainWnd, 2001, WM_SETFONT,

Integer(hCurFont), Integer(True));

SetEdit Text(2001, 'Текст, записанный выбранным шрифтом');

if (hOldFont <> 0) then DeleteObject(hOldFont);


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

Способ, которым можно установить шрифт всех элементов управления окна, рассмотрен ниже. Остался еще один существенный момент: не забывайте удалять объекты GDI (в данном случае – шрифт) после того, как они стали не нужны. Дело в том, что приложение может содержать не более 65 ООО объектов GDI, и при наличии так называемой «утечки» ресурсов GDI может произойти аварийное завершение приложения из-за исчерпания лимита ресурсов GDI.

Установка шрифта элементов управления

Существует множество способов установки шрифта текста, отображаемого в элементах управления. Можно, например, при создании элемента управления посылать ему сообщение WM_SETFONT, передавая дескриптор (HFONT) созданного ранее объекта шрифта. В таком случае код создания и установки шрифта элементов управления (с использованием рассмотренных в этой главе функций) может выглядеть, как показано в листинге 2.35.

Листинг 2.35. Установка шрифта во время создания элементов управления

//Шрифт для элементов управления

font:= CreateFont(16, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET,

OUT_CHARACTER_PRECIS, CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY, DEFAULT_PITCH, 'Courier new');

//Создание элементов управления

ctrl:= CreateButt on(20, 30, 70, 30, 1001, 'Кнопка 1');

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl:= CreateButt on(100, 30, 70, 30, 1002,'Кнопка 2');

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl:= CreateCheck(210, 30, 180, 20, 2001, 'Флажок 1');

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl:= CreateCheck(210, 60, 180, 20, 2001, 'Флажок 2', True);

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

ctrl:= CreateOpti on(210, 100, 180, 20, 3001, 'Переключатель 1', True);

SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

Страница 40