Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Чтобы клавиши shortcut пунктов главного меню главной формы действовали только в этой форме (но не в модальных окнах)

Delphi , Компоненты и Классы , Меню

Чтобы клавиши shortcut пунктов главного меню главной формы действовали только в этой форме (но не в модальных окнах)

Знакомая проблема. Лечится так:


function WindowHook(var Message: TMessage): Boolean;
...

procedure.FormCreate(Sender: TObject);
begin
  // MainForm
  Application.HookMainWindow(WindowHook);
end;

function.WindowHook;
begin
  Result := False;

  with Message do
    case Msg of
      CM_APPKEYDOWN, CM_APPSYSCOMMAND: Msg := WM_NULL;
end;

Проблема, которую вы описываете, является общей - как сделать краткие клавиши главного меню в вашем основном формате работать только внутри этого формата, но не в модальных окнах. Это можно достичь за счет hook'а в Windows-цикле сообщений и перехвата сообщения CM_APPKEYDOWN и CM_APPSSYCOMMAND.

Код, который вы предоставили, делает именно это. Он устанавливает hook для главного окна с помощью метода Application.HookMainWindow, что позволяет вашей приложению перехватывать и обрабатывать сообщения, отправленные в главное окно.

В функции WindowHook вы проверяете, является ли сообщение либо CM_APPKEYDOWN, либо CM_APPSSYCOMMAND, которые являются сообщениями, отправляемыми при нажатии краткой клавиши. Если обнаружено такое сообщение, вы модифицируете его, установив его значение в WM_NULL, что эффективно глотает сообщение и предотвращает его обработку другими частями вашего приложения.

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

Вот разбивка того, что код делает:

  • Функция WindowHook вызывается каждый раз, когда сообщение отправляется в главное окно.
  • Она проверяет, является ли сообщение либо CM_APPKEYDOWN, либо CM_APPSSYCOMMAND.
  • Если это так, она устанавливает значение сообщения в WM_NULL, что эффективно глотает сообщение и предотвращает его обработку другими частями вашего приложения.

Такой подход является эффективным потому, что он только hook'аит главное окно, что означает, что он не будет мешать работе любой другой части вашего приложения. Он также обеспечивает, что краткие клавиши работают только внутри основного формата, как задумано.

В целом, этот код предоставляет надежный и эффективный способ решения проблемы, которую вы описали.

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


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Меню ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-20 08:33:39/0.0068421363830566/2