【问题标题】:Balloon hints on Delphi app tray icon keep popping up indefinitelyDelphi 应用程序托盘图标上的气球提示不断弹出
【发布时间】:2011-05-10 16:21:56
【问题描述】:

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

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

此应用程序始终是气球提示。

如果应用显示另一个气球提示,该提示会在编程的时间内显示,那么幻影提示会继续。

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

【问题讨论】:

  • 检查你是否有一个计时器可以调用托盘图标来显示气球,或者更好的是在整个项目中搜索托盘图标组件的名称,看看你在哪里调用显示气球的过程.
  • @Dorin。谢谢,做到了。分配给 TTrayIcon 的 BalloonHint 属性的代码肯定不会再次被调用。
  • 您是在 Windows XP 上测试这个吗?我似乎记得在那个操作系统上 MS 提供的气球有一个错误。无论如何,请在stackoverflow.com/questions/902642/… 检查接受的答案。我认为这可能会对您有所帮助。
  • 是您自己的应用程序吗?如果是,您可以发布代码以检查它。光靠你的解释不看源码很难给出答案。
  • 你解决过这个问题吗?如果是这样,您应该将您的解决方案作为答案。

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


【解决方案1】:

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

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


[添加完整解决方案]

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

Tray.Visible = true;

【讨论】:

  • 很难看出这与涉及 Delphi 应用程序的问题有什么关系
  • 解决了同样的问题。仅在不同的代码中。将我的一行代码翻译成 Delphi 代码。这对 OP 来说会是个问题吗?
【解决方案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;

您可以通过处理托盘图标发送的消息来查看发生了什么。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多