Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.04.2020, 10:26
Аватар для Guaho
Guaho Guaho сейчас на форуме
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Спасибо за подробное разъяснение! Это новый подход, я такого ещё не встречал нигде.
Но у меня более общий случай. Сори, сразу не написал об этом.
У меня большая база данных. Обработчики горячих клавиш вставлены как на уровне форм (для действий общего характера), так и на уровне компонентов на этой форме (преимущественно гридов, но не только, там и DBMemo, и DBEditы могут быть, и что угодно). Форм у меня почти 30 в проекте, поэтому очень желательно не дробиться на мелочи, а по возможности решить этот вопрос глобально. Попробую ещё в Application.OnHook воткнуть тот код, который вчера пробовал...

Последний раз редактировалось Guaho, 05.04.2020 в 10:30.
Ответить с цитированием
  #2  
Старый 05.04.2020, 21:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если честно, я бы тогда пошел другим путем.
Просто налепил бы нужных TAction и уже в их обработчиках смотрел для какого компонента они вызваны. Это проще, чем бороть систему.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Guaho (06.04.2020)
  #3  
Старый 06.04.2020, 09:36
Аватар для Guaho
Guaho Guaho сейчас на форуме
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Уффф... Кажись что-то наконец нарисовалось! Спасибо за помощь!
Метод такой: всю обработку клавиатуры надо перенести в 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter