2010-11-16 100 views
11

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

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

它总是从这个应用程序提示气球。

如果应用程序显示另一个气球提示,该应用程序将显示设定的时间,则幻影提示将恢复。

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

+0

检查,如果你有一个调用的托盘图标,弹出气球或更好的搜索整个项目的托盘图标组件的名称,看看你叫,显示了气球的程序定时器。 – ComputerSaysNo 2010-11-16 08:41:29

+0

@Dorin。谢谢,完成了。分配给TTrayIcon的BalloonHint属性的代码肯定不会再被调用。 – rossmcm 2010-11-16 09:22:16

+0

你在Windows XP上测试了这个吗?我似乎记得在该操作系统上MS提供的气球有一个错误。无论如何,检查接受的答案在http://stackoverflow.com/questions/902642/how-to-hide-a-taskbar-balloon-at-愿意。我认为这可能会对你有所帮助。 – 2011-02-27 06:49:32

回答

2

您正在使用哪种TrayIcon? “Vcl.ExtCtrls”中的TCustomTrayIcon使用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; 
0

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

我的目标是一旦另一个进来就关闭当前的气球,但我还没有想到要做到这一点。所以这只是一个解决方案。


[增加了完整的解决方案]

的完整的解决方案是非常简单的。在显示新的提示框之前执行此操作(其中Tray是您的TrayIcon/NotifyIcon)。

Tray.Visible = true; 
+0

很难看到这涉及有关德尔福的问题应用程序 – 2014-10-24 14:06:03

+0

这是针对同一问题的解决方案。只有在不同的代码。将我的单行代码翻译成Delphi代码。这是OP的问题吗? – Martin 2014-10-28 13:11:16

相关问题