delphi – 以编程方式关闭TrayIcon Balloon

delphi – 以编程方式关闭TrayIcon Balloon,第1张

概述是否可以通过编程方式关闭TTrayIcon Balloon提示? 问题: 我有一个计时器,每分钟检查一次消息.当它发现一条消息(例如ABC服务停止)时,它会显示带有消息的气球: procedure TFrmTest.tmrTimer(Sender: TObject);begin tmr.Enabled := False; try if IsAnyServiceStopped th 是否可以通过编程方式关闭TTrayIcon Balloon提示?

问题:

我有一个计时器,每分钟检查一次消息.当它发现一条消息(例如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分钟后回到PC(例如),他们将关闭第一条消息,然后托盘图标立即显示第二条消息,接下来的28条消息(用户不佳)也是如此.

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

我尝试的其他解决方案是在显示任何气球时禁用Timer,并且仅在用户关闭当前气球时(或者它自动关闭)再次启用它.但是我找不到任何方法来发现气球何时关闭(如果用户点击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组件中,可以通过BalloonHint属性修改szInfo成员,因此要隐藏显示的气球提示,您只需编写:

TrayIcon.BalloonHint := '';
总结

以上是内存溢出为你收集整理的delphi – 以编程方式关闭TrayIcon Balloon全部内容,希望文章能够帮你解决delphi – 以编程方式关闭TrayIcon Balloon所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1240200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存