Пауза / разрыв как клавиатурное сокращение (Win32, * Возможно * Delphi-специфичный) - PullRequest
4 голосов
/ 15 июля 2010

Разве невозможно использовать клавишу Pause / Break в сочетаниях клавиш?

Я знаю, что могу ответить на клавишу Pause / Break , например

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_PAUSE then
    ShowMessage('VK_PAUSE pressed');
end;

Однако я не могу ответить на клавишу Pause / Break , используя свойства TShortCut, например, в пунктах меню и списках действий.Инспектор объектов позволяет мне ввести Пауза , Сдвиг + Пауза , Ctrl + Пауза , Alt + Пауза , Ctrl + Shift + Пауза и т. Д., Так что она четко распознает клавишу Пауза ,Но когда я запускаю приложение, пункт меню / действие не запускается по указанному ярлыку.Есть ли известный обходной путь?

1 Ответ

11 голосов
/ 15 июля 2010

С D2007, быстрый обходной путь, кажется, назначает его во время выполнения;
Action1.ShortCut := VK_PAUSE;
По какой-то причине, если назначено во время разработки, VK_PAUSE (19), по-видимому, мутирует в VK_NUMLOCK (144).


Когда ярлык назначается во время разработки, в среде IDE необходимо преобразовать строку в ярлык.Проблема в том, что TextToShortCut('Pause'); возвращает 144 вместо 19. Хотя я не уверен, что считаю, что ошибка в Delphi;С 'Паузой', поиск ярлыка находит путь к menus.GetSpecialName, я думаю, что это не должно.


На другой ноте, в то время как обходной путь, упомянутый выше, работает с Alt иShift 'модификаторы, он не работает с модификатором' Ctrl '.Причина в том, что ОС обрабатывает специальный код: «Ctrl + Break»: VK_CANCEL.Чтобы использовать «Ctrl + Pause» в качестве ярлыка, нужно кодировать;

Action1.ShortCut := menus.Shortcut(VK_CANCEL, [ssCtrl]);
...