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

2.4.10.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>

2.4.10.2. Перехват в выборке

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

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