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), которая будет вызываться по одному разу для каждого дочернего окна. В данном примере функция 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. Определение присутствия в системе мыши
function MousePresent: Boolean;
begin
//С помощью вызова GetSystemMetrics определяем наличие мыши в системе
if GetSystemMetrics(SM_MOUSEPRESENT) <> 0 then
Result:= True
else
Result:= False;
end;
Описанная выше функция MousePresent позволяет проверить наличие мыши. Если мышь подключена к компьютеру и ее можно использовать, то MousePresent возвращает значение True, в противном случае – False.
После того как мышь обнаружена, можно приступать к определению координат ее указателя на экране монитора (листинг 3.2).
Листинг 3.2. Определение координат указателя мыши
procedure MouseForm.Button1Click(Sender: TObject);
var
pt: TPoint;
begin
//Получаем координаты указателя мыши
GetCursorPos(pt);
ShowMessage('('+ IntToStr(pt.X) + ','+ IntToStr(pt.Y) +')');
end;