如何在Delphi中判断点击的是哪个托盘提示气泡?
Delphi托盘气泡点击时区分对应消息的解决方案
在使用Delphi的TTrayIcon控件展示不同发送者的气泡提示时,要在BalloonClick事件中判断点击的是哪个气泡并展示对应消息,可以通过以下两种方式实现:
方法一:用类级变量记录当前气泡的关联数据
在窗体类中声明私有变量存储当前弹出气泡对应的发送者信息,点击事件中直接读取该变量即可。
- 声明变量:
type TForm1 = class(TForm) TrayIcon1: TTrayIcon; procedure TrayIcon1BalloonClick(Sender: TObject); private FCurrentSender: string; // 存储当前气泡对应的发送者 public { Public declarations } end;
- 弹出气泡时赋值:
// 弹出Gert的消息气泡 FCurrentSender := 'Gert'; TrayIcon1.Visible := True; TrayIcon1.BalloonHint := 'You got a new message from '+FCurrentSender+'!'; TrayIcon1.ShowBalloonHint; // 弹出Peter的消息气泡 FCurrentSender := 'Peter'; TrayIcon1.Visible := True; TrayIcon1.BalloonHint := 'You got a new message from '+FCurrentSender+'!'; TrayIcon1.ShowBalloonHint;
- 在BalloonClick事件中使用:
procedure TForm1.TrayIcon1BalloonClick(Sender: TObject); begin // 根据存储的发送者信息展示对应消息 ShowMessage('查看来自「' + FCurrentSender + '」的消息'); end;
方法二:扩展TTrayIcon控件,添加自定义属性存储气泡数据
如果需要更严谨的关联(避免变量被意外覆盖),可以自定义继承自TTrayIcon的控件,添加专属属性存储气泡关联数据。
- 自定义控件:
type TMyTrayIcon = class(TTrayIcon) private FBalloonSender: string; // 存储气泡对应的发送者 public property BalloonSender: string read FBalloonSender write FBalloonSender; end;
- 使用自定义控件弹出气泡:
// 弹出Gert的消息气泡 MyTrayIcon1.BalloonSender := 'Gert'; MyTrayIcon1.Visible := True; MyTrayIcon1.BalloonHint := 'You got a new message from '+MyTrayIcon1.BalloonSender+'!'; MyTrayIcon1.ShowBalloonHint; // 弹出Peter的消息气泡 MyTrayIcon1.BalloonSender := 'Peter'; MyTrayIcon1.Visible := True; MyTrayIcon1.BalloonHint := 'You got a new message from '+MyTrayIcon1.BalloonSender+'!'; MyTrayIcon1.ShowBalloonHint;
- 在BalloonClick事件中获取数据:
procedure TForm1.MyTrayIcon1BalloonClick(Sender: TObject); var CustomTrayIcon: TMyTrayIcon; begin if Sender is TMyTrayIcon then begin CustomTrayIcon := TMyTrayIcon(Sender); ShowMessage('查看来自「' + CustomTrayIcon.BalloonSender + '」的消息'); end; end;
注意事项
Windows系统同一时间只会显示一个托盘气泡,后续弹出的气泡会覆盖之前的(或排队等待显示),因此上述两种方法中,最后一次设置的关联数据会对应当前显示的气泡,足以应对常规业务场景。
内容的提问来源于stack exchange,提问作者Felix Murzsa
相关产品推荐
相关产品推荐

