Delphi“托盘”图标(NotifyIcon)上下文菜单在外部单击时不会消失

时间:2009-07-27 15:38:32

标签: delphi systray

我正在尝试在右键单击我的通知图标时显示弹出菜单,这样可以正常工作;但是,当用户点击该菜单外部时,我希望菜单消失。

根据KB135788 - PRB: Menus for Notification Icons Do Not Work Correctly archive设计。

但我所知道的不合适的应用就像这样。我尝试使用弹出菜单的句柄调用 SetForegroundWindow 无效。我确信有可能解决这个问题,因为我已经在几年前做过但不记得是怎么做的。

任何人都知道如何实现预期的行为?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!

我在打电话     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;

作品!

显然,如果在调用此表单时显示该表单,您的应用程序将跳转到最前面,但如果它隐藏(就像我的那样),那么它将起作用。

我很想知道是否有一种方法可以让菜单正常工作而不会让窗户跳到最前面。