Главная » Delphi » Горячая клавиша с вызовом всплывающего меню

0

Сначала горячую клавишу надо зарегистрировать в системе. Это делается с помощью функции RegisterHotKey, параметрами которой являются знакомый нам дескриптор окна типа hwnd, идентификатор клавиши типа integer (клавиш может быть несколько), fsModifiers— модификатор, который определяет, какие клавиши должны быть нажаты совместно с указанной и, наконец, виртуальный код самой клавиши типа word или integer. Дня модификатора допустимы значения: mod alt (дополнительная клавиша <Alt>), mod control (<Ctrl>) и mod shift (<Shift>). Функция возвращает true, если клавиша зарегистрирована успешно, но мы будем считать для простоты, что никто другой наше сочетание заведомо не использует. Если есть подозрение, что это не так, следует сделать проверку на возвращаемое значение функции и предпринять какие-то действия, но в любом случае катастрофы не произойдет — просто не будет работать либо наша функция, либо ранее зарегистрированная. Зарегистрировать клавишу можно, например, по событию onCreate главной формы, добавив к уже имеющемуся тексту следующую строку:

RegisterHotKey(Handle,1,MDD_CONTKOL,vk_F1.2); {регистрируем клавишу Ctrl-F12!

Теперь нужно написать обработчик события по нажатию этой клавиши. Сначала регистрируем в интерфейсной части, в разделе private, саму процедуру обработчика (одна запись — procedure OnMinimizeProc — у нас там уже есть):

private

( Private declarations )

procedure WMHotKey(var Mess:TWMHotKey);message WM_HOTKEY;

С этой процедурой будет связано сообщение wm hotkey . Наконец, собственно процедура обработчика:

procedure TForml.WMHotKey(var Mess: TWMHotKey); begin

/Нажата горячая клавиша Ctrl+F12j

if mess.HotKey=l then (если это клавиша с идентификатором №1, то вызываем всплывающее меню)

Formi.PopupMenui.Popup(Screen.Width-32,Screen.Height-32); end;

При закрытии программы надо не забыть снять регистрацию горячей клавиши. Добавим в процедуру по событию oncioseQuery, где у нас производится окончательное закрытие окна, следующую запись:

UnregisterHorKey(Handle, 1);

Теперь управлять приложением с клавиатуры просто: нажмите комбинацию клавиш <Ctrl>+<FI2>, затем нажмите клавишу управления курсором — стрелочку вверх, фокус перейдет на нижний пункт всплывающего меню Закрыть, и после нажатия клавиши <Enler> приложение закроется. Если стрелочку нажать два раза, то в фокусе будет пункт Восстановить. Таким образом мы получаем возможность быстрого управления приложением с клавиатуры без необходимости долго прицеливаться куда-то мышью. Разумеется, можно пойти и дальше — зарегистрировать несколько разных горячих клавиш, каждую для своего действия, но злоупотреблять такими вещами не следует: необходимость запоминать многочисленные нестандартные сочетания клавиш приведет к тому, что этими возможностями никто не будет пользоваться и все ваши усилия пропадут даром.

Есть и другой, более универсальный метод регистрации горячих клавиш с помощью так называемых "ловушек" (hook), и мы об этом поговорим в следующей главе, но пока достаточно использовать описанный механизм. Сейчас мы используем его для создания программы, которая вообще не имеет видимого окна.

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

По теме:

  • Комментарии