Добавление горячей клавиши в приложение Delphi

скажем у меня есть форма с меню на нем. У меня есть пункт в меню, а TMenuItem, для которого я могу назначить комбинацию клавиш быстрого доступа, скажем, например Ctrl+Я. Но когда я назначаю ShortCut свойство TMenuItem, кажется, просто изменить внешний вид пункта меню, чтобы показать код быстрого доступа, а не автоматически прослушивания для короткого ключа, который будет нажата и запуска мой код ActionManager.

мой google-fu, кажется, сегодня я нахожу только статьи о том, как назначить глобальные горячие клавиши для windows, а не как назначить специальные горячие клавиши для приложений, которые работают только в активной форме.

может ли кто-нибудь наметить для меня шаги, необходимые для добавления горячей клавиши, помимо добавления свойства ярлыка в меню. Я думаю, где-то мне, вероятно, нужно установить форму для прослушивания ввода клавиатуры и поймать нажатие клавиши и ответить на него? Но я не совсем уверен, куда или что путь Delphi сделать это было бы.

2 ответов


вы, похоже, используете действия (ActionManager), поэтому вместо этого назначьте ярлык соответствующему действию. (Назначение действия MenuItem также назначит ярлык для элемента меню.)


Рассмотрим пример окна дескрипторы не предусмотрены для сообщения VCL, для которого мы используем WM_HOTKEY. Это сообщение отправляется зарегистрированным окном в горячей клавише Windows, что позволяет программе реагировать на него, даже без фокуса ввода:

type
TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    // Declare a event handler
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
   // Registering a hotkey Ctrl+Alt+F5
   RegisterHotKey(Handle, 0, MOD_CONTROL or MOD_ALT, VK_F5);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Unregisters a hotkey
   UnRegisterHotKey(Handle, 0);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
   // This procedure is called when a window message WM_HOTKEY
   inherited;  // We give the form to process the message,
               // if she already has its handler
   Beep;       // We perform additional actions
end;