type
TForm1 = class(TForm)
// ... private
IsMenuOpen: Boolean;
procedure WMMENUSELECT(varmessage: TWMMENUSELECT); message WM_MENUSELECT;
end;
implementationprocedure TForm1.WMMENUSELECT(varmessage: TWMMENUSELECT);
begininherited;
IsMenuOpen := not ((message.MenuFlag and $FFFF = 0) and (message.Menu = 0));
end;
Here's the translation of the provided Delphi code into Russian:
Код на языке Delphi предназначен для обнаружения открыта ли меню или нет. Используется процедура события WMMENUSELECT для достижения этого.
Вот как это работает:
Когда пользователь выбирает пункт из меню, Windows отправляет сообщение WM_MENUSELECT в окно, владеющее этим меню.
В обработчике события WMMENUSELECT код проверяет, не равно ли свойство MenuFlag записи TWMMENUSELECT$FFFF, и свойство Menu не равно 0. Если оба условия выполняются, то это означает, что меню было выбрано.
Переменная IsMenuOpen затем устанавливается в противоположное значение (т.е., если она была ранее True, она становится False, и наоборот). Это эффективно отслеживает, открыто ли меню или нет.
Вот альтернативное решение с использованием встроенной функции Delphi MenuBar:
type
TForm1 = class(TForm)
// ...
private
IsMenuOpen: Boolean;
procedure FormCreate(Sender: TObject); override;
procedure FormDestroy(Sender: TObject); override;
end;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
IsMenuOpen := False;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if not IsMenuOpen then
MenuBar.Close;
end;
В этом примере событие FormCreate используется для инициализации IsMenuOpen в значение False, указывая, что меню не открыто. Событие FormDestroy используется для закрытия MenuBar при уничтожении формы, обеспечивая очистку любых открытых меню.
Monitoring the state of the MenuBar property allows you to easily determine whether a menu is currently open or not.
В статье описывается способ определения открытия меню в приложении с использованием языка программирования Delphi и обработки сообщения WM_MENUSELECT.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS