Delphi应用程序托盘图标上的气球提示会无限期弹出

Delphi应用程序托盘图标上的气球提示会无限期弹出,delphi,delphi-2006,trayicon,hints,popup-balloons,Delphi,Delphi 2006,Trayicon,Hints,Popup Balloons,我有一个Delphi2006应用程序,可以最小化为一个托盘图标,并通过托盘图标上方的气球提示显示各种警报消息 在某些情况下——我不知道什么时候——之前显示的气球提示会不断弹出,不会消失。它显示编程的时间长度,关闭,然后立即重新出现 它始终是来自此应用程序的气球提示 如果应用程序显示另一个气球提示,该提示在编程时间内显示,则幻影提示恢复 这就好像提示卡在某个队列中的某个位置,并且没有被删除。在没有人有灵感的情况下(我意识到这是一个很长的机会……),有人知道如何清除气球提示吗?你在使用哪个TrayI

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

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

它始终是来自此应用程序的气球提示

如果应用程序显示另一个气球提示,该提示在编程时间内显示,则幻影提示恢复


这就好像提示卡在某个队列中的某个位置,并且没有被删除。在没有人有灵感的情况下(我意识到这是一个很长的机会……),有人知道如何清除气球提示吗?

你在使用哪个TrayIcon?“Vcl.ExtCtrls”中的TCustomTrayIcon使用tnotifyiconda将弹出窗口发送到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;  

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

我的目标是在另一个气球到达时立即关闭当前的气球头,但我还没有想出办法。因此,这只是解决方案的一半


[添加完整解决方案]

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


检查您是否有调用托盘图标以显示引出序号的计时器,或者更好的做法是在整个项目中搜索托盘图标组件的名称,并查看在何处调用显示引出序号的过程。@Dorin。谢谢,做了。分配给TTrayIcon的BallooHint属性的代码肯定不会被再次调用。是否在Windows XP上测试此功能?我似乎记得微软在那个操作系统上提供的气球有一个bug。无论如何,请在上检查已接受的答案。我想这可能会对你有所帮助。这是你自己的应用程序吗?如果是的话,你能把代码贴出来检查一下吗。仅仅依靠你的解释而不看源代码是很难给出答案的。你曾经解决过这个问题吗?如果是这样的话,你应该把你的解决方案作为一个答案。很难看出这与涉及Delphi应用程序的问题有什么关系。这是同一个问题的解决方案。只有在不同的代码中。将我的一行代码翻译成Delphi代码。这对OP来说是个问题吗?
Tray.Visible = true;