2.4.10. Перехват нажатия клавиш¶
2.4.10.1. Установка перхватчика для всего приложения¶
procedure HookKeyboardKeyDownEvent(Operation: TbtkScriptDataSetOperationObject)
- Установить перехватчик. В параметре
Operation необходимо указать операцию обратного вызова. Данная операция
будет вызываться при каждом нажатии клавиши. Перехват можно отключить с
помощью procedure UnHookKeyboardKeyDownEvent()
, либо будет снять
автоматически при выгрузке метаданных. В приложении можно одновременно
установить не более одного перехватчика на нажатие клавиш. При попытке
установить перехватчик при уже установленном будет возбуждено
исключение.
Операция-обработчик вызывается с аргументами, в которых передается информация о нажатой клавише:
- VirtualKey - код виртуальной клавиши MSDN
- Char - виртуальный код, преобразованный в символ клавиатуры (Сканкод)
- ShiftState - состояние зажатых модификаторов типа TShiftState.
- Handled - флаг, в который можно вернуть результат обработки нажатия. По умолчанию False - это значит, что нажатие клавиши будет передано следующим обработчикам. True - нажатие обработано, и другим обработчикам передавать обработку нажатия не надо. В этом случае элементы управления никак не узнают о срабатывании клавиши.
Пример операции-обработчика:
<PASCAL args>
args.Validate(['VirtualKey', 'Char', 'ShiftState', 'Handled']);
str := Format('VK: %s; Char: %s; CTRL: %s; SHIFT: %s;ALT:%s;',
[IntToStr(args.VirtualKey), args.Char,
IntToStr(GetShiftState(ssCTRL)),
IntToStr(GetShiftState(ssSHIFT)),
IntToStr(GetShiftState(ssALT))]);
SetVar('Caption', str);
args.Handled := true;
</PASCAL>
procedure UnHookKeyboardKeyDownEvent
- Снять перехватчик.
Перехватчик ловит нажатия на всех формах и контролах в рамках одного приложения.
Пример регистрации перехватчика:
<PASCAL>
Application.HookKeyboardKeyDownEvent(Selection.OperationByName('HookProc'));
</PASCAL>
Дерегистрация:
<PASCAL>
Application.UnHookKeyboardKeyDownEvent;
</PASCAL>
2.4.10.2. Перехват в выборке¶
В “Основных свойствах” у операции выборки открыть редактор свойства “Горячие клавиши”, там можно поставить флаг “Нажатие любых клавиш”, в этом случае операция будет срабатывать на любые нажатия клавиш. Либо можно задать определенную комбинацию “горячую клавишу”.
Фрейм выборки должен быть активен, чтобы поймать нажатие клавиш.