Показать сообщение отдельно
  #1  
Старый 04.04.2020, 21:17
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию Подавление нажатия Alt для TMenu

Здравствуйте, форумчане!
В своей программе я реализовал механизм пользовательских горячих клавиш на разные типовые действия. В настройках для каждого такого действия задаётся сама клавиша, плюс, возможно, модификаторы (Alt, Ctrl, Shift). С двумя последними проблем нет, а вот нажатие Alt тут же перехватывается главным меню формы, и в результате:
- если клавиатурная комбинация соответствует вызову какого-либо пункта меню, одновременно вываливается это меню, и срабатывает код горячей клавиши.
- в противном случае просто срабатывает горячая клавиша, но с системным "бипом" - мол, ошибка тут у вас.
Обе эти ситуации меня не радуют, хотелось бы исправить этот момент.
Но никак не получается перехватить и подавить нажатие Alt - такое ощущение, что меню перехватывает коды клавиш до того, как их перехватывает форма, компонент ApplicationEvents и метод OnHook. Отследить факт нажатия Alt я могу (в частности, это делают мои обработчики OnKeyDown с целю отследить появление горячих комбинаций), но вот подавить его - никак. Либо давится всё и нет вообще реакции на клавиатуру, либо Alt обязательно добирается до главного меню, вызывая нежелательные действия.
Может кто-нибудь сталкивался и знает, как побороть всемогущий Alt? Проблема точно решаемая, во многих приложениях это делается, но моей квалификации никак не хватает, чтобы найти ответ самостоятельно. Сколько ни гуглил - всё вокруг да около, реально действующего кода так и не увидел...
Ответить с цитированием