Листинг 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).
Листинг 2.37.
Реализация функции EnumFunc
function EnumFunc(wnd: HWND; param: LPARAM):BOOL; stdcall;
begin
SendMessage(wnd, WM_SETFONT, WPARAM(param), LPARAM(True));
EnumFunc := True; //Продолжать перечисление
end;
В принципе, имя этой функции и названия параметров могут быть любыми. А вот типы параметров и возвращаемого значения, а также способ вызова функции должны быть именно такими, как в листинге 2.37. Функция должна возвращать True, если нужно продолжать перечисление окон, и False в противном случае. Значение, которое было передано в качестве третьего параметра API-функции EnumChildWindows, передается в функцию обратного вызова. В нашем случае этим параметром является дескриптор шрифта.
Глава 3 Мышь и клавиатура
• Мышь
• Клавиатура
Самыми распространенными средствами для ввода информации в компьютер являются мышь и клавиатура. Уже сложно представить себе персональный компьютер без таких устройств, так как клавиатура обеспечивает полноценный ввод текстовой информации, а мышь – это наиболее простое, интуитивно понятное средство для работы с графическим интерфейсом. В этой связи существует масса возможностей по созданию различного рода хитростей и трюков, связанных с мышью и клавиатурой.
3.1. Мышь
Начнем с простых операций с мышью. Вероятно, простота этого средства определяет то, как легко использовать в программе данные, получаемые от мыши. Поэтому при работе с мышью большинство сложностей состоит именно в особых алгоритмах обработки данных, а не в получении этих данных (по сравнению, например, с клавиатурой), в чем вы сами сейчас сможете убедиться.
Координаты и указатель мыши
Для начала программным путем определим присутствие мыши в системе. Один из способов определения наличия мыши демонстрирует следующий пример (листинг 3.1).
Листинг 3.1.
Как узнать, присутствует ли мышь
function MousePresent : Boolean;
begin
//При помощи вызова GetSystemMetrics определяем
//наличие мыши в системе
if GetSystemMetrics(SM_MOUSEPRESENT) <> 0 then
Result := True
else
Result := False;
end;
Описанная выше функция MousePresent позволяет проверить наличие мыши. Когда мышь присутствует, MousePresent возвращает True, в противном случае – False.