右键单击我的通知图标时,我试图显示一个弹出菜单,效果很好;但是我希望当用户在该菜单之外单击时菜单消失。
根据KB135788 - PRB:通知图标的菜单无法正常工作 (存档) ,它应该是设计使然。
但我所知道的没有像样的应用程序的行为是这样的。我尝试使用弹出菜单的句柄调用SetForegroundWindow无济于事。我确信可以解决这个问题,就像我几年前所做的那样,但不记得如何了。
任何人都知道如何实现预期的行为?
右键单击我的通知图标时,我试图显示一个弹出菜单,效果很好;但是我希望当用户在该菜单之外单击时菜单消失。
根据KB135788 - PRB:通知图标的菜单无法正常工作 (存档) ,它应该是设计使然。
但我所知道的没有像样的应用程序的行为是这样的。我尝试使用弹出菜单的句柄调用SetForegroundWindow无济于事。我确信可以解决这个问题,就像我几年前所做的那样,但不记得如何了。
任何人都知道如何实现预期的行为?
我找到了解决方案!
我正在调用 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;
作品!
显然,如果在调用它时表单是可见的,那么您的应用程序将首先跳转,但如果它是隐藏的(就像我的那样),那么它就会工作。
不过,我很想知道是否有一种方法可以使菜单正常工作而不会跳到最前面。