3.4.9. Перехват нажатия клавиш¶
3.4.9.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>
3.4.9.2. Перехват в выборке¶
В "Основных свойствах" у операции выборки открыть редактор свойства "Горячие клавиши", там можно поставить флаг "Нажатие любых клавиш", в этом случае операция будет срабатывать на любые нажатия клавиш. Либо можно задать определенную комбинацию "горячию клавишу".
Фрейм выборки должен быть активен, что бы поймать нажатие клавишь.