1

我有一个 D2006 应用程序,它通过托盘气球提示通知各种事件。每隔一段时间,但不是很频繁——比如应用程序的 10 次调用中有 1 次——其中一个提示决定它会一次又一次地弹出……永远。唯一阻止它的是关闭应用程序。

如果应用程序发出另一个气球 int,它会替换幻影提示,但在新提示超时后,幻影提示会返回。同样,如果我关闭幻影提示,它会立即返回。

我已经验证不会重复调用创建提示的代码。暗示源自内心深处的某个地方。

    MainForm.TrayIcon1.BalloonFlags   := Flag ;
    MainForm.TrayIcon1.BalloonTitle   := Title ;
    MainForm.TrayIcon1.BalloonHint    := Message ;
    MainForm.TrayIcon1.BalloonTimeout := Delayms ;
    MainForm.TrayIcon1.ShowBalloonHint ;
4

2 回答 2

5

为气球提示创建一个公共入口点。即包装函数。除了要显示的文本,还包括另一个名为 WhereCalledFrom 的字符串参数,并使用它来识别应用程序的哪个部分正在调用提示。
在包装器中,记录所有提示调用(到 .txt 文件、GExperts 调试器、Windows 输出调试字符串、Windows 事件日志等)以记录日期/时间、WhereCalledFrom 和消息。这应该可以让你很容易地找到它。

于 2011-03-08T13:18:39.070 回答
0

您可能想尝试关闭自动关闭气球并让您的应用程序执行此操作,例如在显示气球时设置一个计时器,然后当计时器到期时,关闭气球。

最重要的是,(我在 c# 中遇到过类似的问题 - 我认为它更多的是 Windows 的东西而不是 IDE 特定的),其中一个解决方案是手动强制托盘图标不可见然后可见,即

TrayIcon1.Visible := false;
TrayIcon1.Visible := true;

因此,当您手动隐藏气球图标时,请运行上述代码以“清理”系统托盘。这可能会阻止“幻影”气球提示。只是要尝试的东西。

于 2011-03-10T00:42:46.220 回答