Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чиртик Александр - Delphi. Трюки и эффекты ltrs...rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
964.52 Кб
Скачать

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

Есть множество способов установки шрифта текста, отображаемого в элементах управления. Можно, например, при создании каждого элемента управления посылать ему сообщение 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 := CreateButton(20, 30, 70, 30, 1001, 'Кнопка 1');

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

ctrl := CreateButton(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 := CreateOption(210, 100, 180, 20, 3001, 'Переключатель 1',

True);

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

ctrl := CreateOption(210,130,180,20,3002, 'Переключатель 2',

False, True);

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

ctrl := CreateOption(210, 160, 180, 20, 3003, 'Переключатель 3',

True);

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

//Запуск цикла обработки сообщений

while (Longint(GetMessage(mess, 0, 0, 0)) <> 0)

do begin

TranslateMessage(mess);

DispatchMessage(mess);

end;

//Удаление шрифта

DeleteObject(font);

Выглядит окно с элементами управления, шрифт которых установлен любым из рассмотренных способов, так, как показано на рис. 2.9.

Рис. 2.9. Шрифт элементов управления, отличный от системного

Способ задания шрифта, приведенный в листинге 2.35, легко реализовать. Его существенным недостатком является двукратное увеличение количества строк кода, выполняющих создание элементов управления. Для окон, содержащих большое количество элементов управления, можно предложить более универсальный способ (листинг 2.36).

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

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

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');

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

CreateButton(20, 30, 70, 30, 1001, 'Кнопка 1');

CreateButton(100, 30, 70, 30, 1002,'Кнопка 2');

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

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

CreateOption(210, 100, 180, 20, 3001, 'Переключатель 1', True);

CreateOption(210, 130, 180, 20, 3002, 'Переключатель 2', False, True);

CreateOption(210, 160, 180, 20, 3003, 'Переключатель 3', True);

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

EnumChildWindows(hMainWnd, Addr(EnumFunc), font);

//Запуск цикла обработки сообщений

while (Longint(GetMessage(mess, 0, 0, 0)) <> 0)

do begin

TranslateMessage(mess);

DispatchMessage(mess);

end;

DeleteObject(font);

Собственно за установление шрифта отвечает в приведенном листинге только одна строка:

EnumChildWindows(hMainWnd, Addr(EnumFunc), font);

Правда, при этом нужно определить функцию обратного вызова (в данном случае это функция EnumFunc), которая будет вызываться по одному разу для каждого дочернего окна. В нашем примере функцияЕпитРипс имеет следующий вид (листинг2.37).