Delphi app tray图标上的气球提示会无限期地弹出

时间:2010-11-16 08:10:48

标签: delphi delphi-2006 trayicon hints popup-balloons

我有一个Delphi 2006应用程序可以最小化到托盘图标,并通过托盘图标上的气球提示显示各种警报消息。

在某些情况下 - 我不知道什么时候 - 先前显示的气球提示不断弹出并且不会消失。它显示编程的时间长度,关闭,然后立即重新出现。

这个应用程序始终是一个气球提示。

如果应用程序显示另一个气球提示,那个显示已编程的时间,那么幻像提示将重新开始。

就好像提示卡在某个队列中并且不会被删除。没有任何人有一些灵感(我意识到这是一个长镜头...),有没有人知道如何清除气球提示?

2 个答案:

答案 0 :(得分:2)

您使用的是哪种TrayIcon? TCustomTrayIcon" Vcl.ExtCtrls"使用TNotifyIconData将Popup发送到TrayIcon。某些属性需要Windows Vista或更高版本。

public
  FData: TNotifyIconData; //Winapi.ShellAPI

procedure TCustomTrayIcon.ShowBalloonHint;
begin
  FData.uFlags := FData.uFlags or NIF_INFO;
  FData.dwInfoFlags := Cardinal(FBalloonFlags);
  Shell_NotifyIcon(NIM_MODIFY, FData); //Refresh(NIM_MODIFY);
end;

您可以通过处理由trayicon发送的消息来查看最新情况。

NIN_BALLOONSHOW      = WM_USER + 2;
NIN_BALLOONHIDE      = WM_USER + 3;
NIN_BALLOONTIMEOUT   = WM_USER + 4;
NIN_BALLOONUSERCLICK = WM_USER + 5;  

答案 1 :(得分:0)

我在VB.NET中面临同样的问题。我的应用程序通过系统托盘中的气球提示显示错误消息。当一次出现多个错误时,balloontip会坚持正常的超时并一个接一个地显示错误。看起来有某种缓冲区可以记住您尝试显示balloontip的实际次数。如果你停止显示新的气球提示并等待足够长的时间,它最终会停止。

我的目标是在另一个进入后立即关闭当前的气球提示,但我还没想到要做到这一点。所以这只是解决方案的一半。


[添加完整解决方案]

完整的解决方案非常简单。在显示新的气球提示(托盘是您的TrayIcon / NotifyIcon)之前执行此操作。

Tray.Visible = true;