type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Item01: TMenuItem;
Item11: TMenuItem;
Item21: TMenuItem;
private{ Private declarations }publicprocedure WMMenuSelect(var M: TWMMenuSelect); message
WM_MENUSELECT;
end;
implementation{$R *.RES}procedure TForm1.WMMenuSelect(var M: TWMMenuSelect);
begininherited;
{ Этот Beep сигнализирует вообще об открытии меню }
MessageBeep(MB_ICONASTERISK);
{ А зтот Beep - только о выборе в меню нового Item }if M.Menu = MainMenu1.Handle then
MessageBeep(MB_ICONASTERISK);
end;
end.
Вопрос по программированию на Delphi!
Для определения открыта ли меню или нет, вы можете использовать свойство Enabled основного компонента меню (MainMenu1 в этом случае). Когда меню открыто, свойство Enabled будет равно True, а когда оно закрыто - False.
Вот пример:
procedureTForm1.FormMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);beginifnotMainMenu1.Enabledthen// Меню закрыто, сделайте что-то здесь...end;end;
В этом коде снippet-а обработчик события FormMouseDown проверяет, является ли основное меню (MainMenu1) включенным (т. е., открытым). Если оно не включено, то это означает, что меню закрыто.
Альтернативно, вы можете использовать свойство Visible основного компонента меню. Когда меню видимо и открыто, свойство Visible будет равно True, а когда оно скрыто или закрыто - False.
procedureTForm1.FormMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);beginifnotMainMenu1.Visiblethen// Меню закрыто, сделайте что-то здесь...end;end;
В этом случае обработчик события FormMouseDown проверяет, является ли основное меню (MainMenu1) видимым (т. е., открытым). Если оно не видимо, то это означает, что меню закрыто.
Помните, что вам нужно адаптировать обработчик событий в соответствии со своими конкретными потребностями и контекстом, в котором вы хотите обнаружить, является ли меню открытым или закрытым.
В статье описывается способ определения открытия меню или нет, используя событие WM_MENUSELECT и проверку Handle главного меню в процедуре TForm1.WMMenuSelect.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.