Контекстное меню значка Delphi «Tray» (NotifyIcon) не исчезает при нажатии за его пределы.

StackOverflow https://stackoverflow.com/questions/1188905

  •  19-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь отобразить всплывающее меню при щелчке правой кнопкой мыши по значку уведомления, и это работает нормально;Но я хочу, чтобы меню исчезало, когда пользователь щелкает за пределами этого меню.

Это якобы так задумано KB135788 — ПРБ:Меню для значков уведомлений работают неправильно (архив).

Но ни одно приличное приложение, которое я знаю, не ведет себя так.Я пробовал позвонить УстановитьПередний ПланОкно использование дескриптора всплывающего меню безрезультатно.Я уверен, что это можно обойти, как я сделал это много лет назад, но не помню, как.

Кто-нибудь знает, как добиться ожидаемого поведения?

Это было полезно?

Решение

Я нашел решение!

Я звонил SetForegroundWindow(PopupMenu1.Handle);

Это не работает, но изменив это в обработчике событий OnPopup на

procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
  // Hack to fix the "by design" behaviour of popups from notification area icons. 
  // See: http://support.microsoft.com/kb/135788
  BringToFront();
end;

Работает!

Очевидно, что если форма видна при вызове этого метода, ваше приложение будет двигаться вперед, но если оно скрыто (как у меня), то оно будет работать.

Однако мне было бы интересно узнать, есть ли способ заставить меню работать правильно без прыжков в окне.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top