|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Спасибо за подробное разъяснение! Это новый подход, я такого ещё не встречал нигде.
Но у меня более общий случай. Сори, сразу не написал об этом. У меня большая база данных. Обработчики горячих клавиш вставлены как на уровне форм (для действий общего характера), так и на уровне компонентов на этой форме (преимущественно гридов, но не только, там и DBMemo, и DBEditы могут быть, и что угодно). Форм у меня почти 30 в проекте, поэтому очень желательно не дробиться на мелочи, а по возможности решить этот вопрос глобально. Попробую ещё в Application.OnHook воткнуть тот код, который вчера пробовал... Последний раз редактировалось Guaho, 05.04.2020 в 10:30. |
#2
|
|||
|
|||
Ну, если честно, я бы тогда пошел другим путем.
Просто налепил бы нужных TAction и уже в их обработчиках смотрел для какого компонента они вызваны. Это проще, чем бороть систему. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Guaho (06.04.2020)
|
#3
|
||||
|
||||
Уффф... Кажись что-то наконец нарисовалось! Спасибо за помощь!
Метод такой: всю обработку клавиатуры надо перенести в OnShortCut формы. И далее примерно так: Код:
procedure Tfm_komp.FormShortCut(var Msg: TWMKey; var Handled: Boolean); begin GlobalKeyBoardKey := dm.GetExtKey(Msg.CharCode); // Получение "расширенного" кода (свой формат) для последующего сравнения с кодами заданных в настройках горячих клавиш. GAlt := dm.AltDown; // определение факта нажатия Alt, код я приводил ранее. if GlobalKeyBoardKey = ukShowOperPanel then // пример обработчика (показ/скрытие панели) begin sbShowOperPanel.Down := not sbShowOperPanel.Down; sbShowOperPanelClick(Self); Handled := true; exit; end; ........ // (действия с другими клавишами) if GAlt then Handled := true; // если вдруг обнаружилась нажатая "неподавленная" Alt, "давим" её. end; Последний раз редактировалось Guaho, 06.04.2020 в 09:55. |