C++使用TTrayIcon来制作系统托盘动态图标和气泡提示
TTrayIcon 的主要属性:
一.TTrayIcon->Icon
指定托盘图标, 有几种用法:
1、设计时选择;
2、把一个 TIcon 对象给它;
3、使用当前程序图标: TrayIcon1->Icon = Application->Icon;
TrayIcon1->SetDefaultIcon();
二.TrayIcon->Icons 与 TrayIcon1->IconIndex
TrayIcon->Icons 对应一个 TImageList,
用 TrayIcon->IconIndex 来指定使用 TImageList 中的第一个图标.
三.TrayIcon->PopupMenu
TrayIcon->PopupMenu 对应一个 TPopupMenu,
托盘图标一般少不了右键菜单.
四.TrayIcon->Visible
隐藏或显示系统托盘的图标; 虽简单、但关键, 因默认是 False.
五.TrayIcon->Hint
随鼠标指针的提示文本, 这是老式的, 下面有新型的.
TrayIcon->BalloonHint、BalloonTitle、BalloonFlags、BalloonTimeout
这都是新型的 Hint 相关的.
TrayIcon->BalloonHint: 文本
TrayIcon->BalloonTitle: 标题
TrayIcon->BalloonFlags: 图标样式
TrayIcon->BalloonTimeout: 停留时间
需要用 TrayIcon 的 ShowBalloonHint 方法启动显示
六.TrayIcon.Animate 与 TrayIcon1.AnimateInterval
TrayIcon 的新 Hint(BalloonHint)可设定动画.
TrayIcon->Animate: 这决定是否启用动画
TrayIcon1->AnimateInterval: 动画间隔时间
TTrayIcon 的主要事件:
OnAnimate: 写动画代码的事件
OnBalloonClick: 点击 BalloonHint 时…
OnClick: 单击图标时…
OnDblClick
OnMouseDown
OnMouseMove
OnMouseUp
TTrayIcon 还有两个方法, 前面都已提到了:
TTrayIcon->SetDefaultIcon;
TTrayIcon->ShowBalloonHint;
下面是两个实例:
一.“气泡提示”的制作
第一步:在窗体中放置 TrayIcon 控件( Additional 面板中可以找到)。
第二步:设置 TrayIcon 的 Icon 图标,载入一个 ICO 文件。
第三步:设置 TrayIcon 的 BalloonHint 为“ C++builder2010 高级控件应用”,设置 BalloonTitle 为“程序员2017合订本”。设置 Visible 为 True 。
第四步:双击窗体,在 OnCreate 事件中写入下面代码: TrayIcon1->ShowBalloonHint;
好了, F9 运行程序,一个“气泡提示”就会出现在图标上。属性中的 BalloonTimeout 是设置“气泡提示”多少秒后消失,默认是 3 秒。
二.动态图标
我们大家都知道,当有 QQ 消息时,托盘中会有一个闪烁图标,使用 TrayIcon 控件可以非常容易地实现这个功能。
使图标动起来,其实就是使用多个图标进行切换。
QQ 的闪烁图标,其实就是使用的两个图标来进行切换的,一个是头像图标,一个是空的图标。
下面我们就来模拟 QQ 头像闪烁功能:
第一步:在窗体上放置 ImageList 控件(在 Win32 面板中可以找到)。
第二步:设置 ImageList 控件的 Width 和 Height 属性为 32 ,然后双击 ImageList ,点击“ Add ”按钮添加图标文件。第一个添加的是要显示的图标,第二个添加一个空的图标(可以使用 Image Editor 新建一个 ICO 文件,然后直接保存即可得到一个空的图标。)。
第三步:设置 TrayIcon 的 Icons 属性为 ImageList1 (可以直接在列表中选择)。
第四步:在 Form1 的 OnFormShow 事件中加入下面的代码:
TrayIcon1->Animate = True;
TrayIcon1->AnimateInterval = 450;
当 Animate 为 True 时,将自动按 ImageList 控件中图标的顺序进行依次显示,形成动态效果。 AnimateInterval 为每隔多少时间显示下一个图标。如果要停止闪烁,将 Animate 设置为 False 即可。
需要提到的是:
在Samples组件页中有一个TCTrayIcon组件,它封装编写所需的Window API函数,他有几个属性是这个TrayIcon所没有的。
Hide设为true时,最小化时隐藏在任务栏上的标题栏; PopupMenuOn设置触发弹出菜单的鼠标操作
说明:imClick鼠标单击
imDoubleClick鼠标双击
imLeftClickUp单击鼠标左键,放开
imLeftDoubleClick双击鼠标左键
imMouseDown按下鼠标键
imMouseUp按下鼠标键,放开
imNone不设置鼠标操作
imRightClickUp单击鼠标右键,放开
imRightDoubleClick双击鼠标右键 RestoreOn设置恢复最小化到正常状态 最小化和隐窗体应该用: TrayIconMe->Minimize()来实现
还原窗体用:TrayIconMe->Restore()。