3.4.9. Перехват нажатия клавиш

3.4.9.1. Установка перхватчика для всего приложения

procedure HookKeyboardKeyDownEvent(Operation: TbtkScriptDataSetOperationObject) - Установить перехватчик. В параметре Operation необходимо указать операцию обратного вызова. Данная операция будет вызываться при каждом нажатии клавишы. Перхват можно отключить с помощью procedure UnHookKeyboardKeyDownEvent() , либо будет снять автоматически при выгрузке метаданных. В приложении можно одновременно установить не более одного перехватчика на нажатие клавиш .При попытке установить перехватчик при уже установленном будет возбуждено исключение.

Операция-обработчик вызывается с аргументами в которых передается информация о нажатой клавише:

  1. VirtualKey - код виртуальной клавиши MSDN
  2. Char - виртуальный код преобразованный в символ клавиатуры(Сканкод)
  3. ShiftState - состояние зажатых модификаторов типа TShiftState.
  4. 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. Перехват в выборке

В "Основных свойствах" у операции выборки открыть редактор свойства "Горячие клавиши", там можно поставить флаг "Нажатие любых клавиш", в этом случае операция будет срабатывать на любые нажатия клавиш. Либо можно задать определенную комбинацию "горячию клавишу".

Фрейм выборки должен быть активен, что бы поймать нажатие клавишь.