gpt4 book ai didi

delphi - 以编程方式关闭 TrayIcon 气球

转载 作者:行者123 更新时间:2023-12-03 15:30:22 26 4
gpt4 key购买 nike

是否可以通过编程方式关闭 TTrayIcon 气球提示?

问题:

我有一个计时器,每分钟检查一次消息。当它发现一条消息(例如 ABC 服务已停止)时,它会显示带有消息的气球:

procedure TFrmTest.tmrTimer(Sender: TObject);
begin
tmr.Enabled := False;
try
if IsAnyServiceStopped then
ShowBallon(bfError, 'The ABC Service is stopped. Do something!!!');
finally
tmr.Enabled := True;
end;
end;

procedure TfrmTest.ShowBallon(pFlag: TBalloonFlags; pMessage: string);
begin
try
// HERE I'D LIKE TO CLOSE THE BALLOON IF IT'S OPENNED
TrayIcon.BalloonFlags := pFlag;
TrayIcon.BalloonHint := pMessage;
TrayIcon.ShowBalloonHint;
except
end;
end;

TrayIcon BalloonTimeOut 设置为 3000(3 秒)。由于计时器每分钟触发一次消息(当有任何消息时),如果用户不关闭它,系统会建立一个消息队列。例如,如果用户在 30 分钟后返回电脑,他们将关闭第一条消息,然后托盘图标立即显示第二条消息,接下来的 28 条消息也是如此(糟糕的用户)。

我知道气球会自动关闭,但只有当用户进行一些输入(鼠标移动、按键,并且应用程序不需要聚焦甚至可见)时它才会关闭。因此,如果用户离开计算机,气球将永远留在那里,直到输入。

我尝试的其他解决方案是在显示任何气球时禁用计时器,并仅在用户关闭当前气球(或者它自动关闭)时再次启用它。但我找不到任何方法来发现气球何时关闭(如果用户单击 X 或它自动关闭,则 OnBalloonClick 事件不会触发)。

最佳答案

NOTIFYICONDATA的引用结构体描述了如何在szInfo成员描述中隐藏气球提示:

To remove the balloon notification from the UI, either delete the icon (with NIM_DELETE) or set the NIF_INFO flag in uFlags and set szInfo to an empty string.

对于 TTrayIcon 组件(至少在您的 Delphi 版本中)很容易满足后一个选项,因为当 TTrayIcon 显示气球通知时,NIF_INFO 标志已设置,所以剩下的就是将 szInfo 成员设置为空字符串。在 TTrayIcon 组件中,szInfo 成员可以通过 BalloonHint 属性修改,因此要隐藏显示的气球提示,您可以简单地编写:

TrayIcon.BalloonHint := '';

关于delphi - 以编程方式关闭 TrayIcon 气球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31184834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com