TrayIcon控件使用的疑问,谢谢

sw4419 2010-07-09 02:11:44
在现有的程序里使用了TrayIcon控件。
现在如果点击form里的button1控件,能在系统托盘图标里,出现气泡提示;
点击button2能修改气泡提示的内容;
该如何实现,谢谢。
...全文
183 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
YeBinYe 2010-07-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ccrun 的回复:]

这帖子的分已经抢不上了,再回答也是多余的。
[/Quote]
呵呵,发现最近TrayIcon的问题挺多的啊,刚才找了一下,发现之前也有问TrayIcon气泡提示的问题,http://topic.csdn.net/u/20100705/16/716316f9-c532-41cd-92ea-2fe0247076d2.html?27158
YeBinYe 2010-07-10
  • 打赏
  • 举报
回复
邮件已经发送,请查收!
ccrun.com 2010-07-10
  • 打赏
  • 举报
回复
这帖子的分已经抢不上了,再回答也是多余的。
sw4419 2010-07-10
  • 打赏
  • 举报
回复
恩,谢谢你。麻烦你把demo程序,发到我的邮箱,谢谢。
邮箱:sw4419@126.com
YeBinYe 2010-07-10
  • 打赏
  • 举报
回复
这个TrayIcon代码是我封装起来用于TrayIcon托盘提示用的,已经运用于多个自己开发的软件中,从之前的CB6、CB2006、CB2010都可以用,代码是没有问题,我待会儿弄个demo程序再发给你看看,环境采用CB2006.
sw4419 2010-07-10
  • 打赏
  • 举报
回复
感谢“yeyanbin(南才北往) ”的回复;不过,我运行你的代码会出错(编译能通过,窗体不能正常显示),你那里能正常运行吗?
iqyely 2010-07-10
  • 打赏
  • 举报
回复
楼上的已经说得很全了。
hnzlk 2010-07-10
  • 打赏
  • 举报
回复
在这里有个BCB自带的例子,
C:\Program Files\Borland\CBuilder6\Examples\Controls\Traydemo
YeBinYe 2010-07-10
  • 打赏
  • 举报
回复
CB6的TrayIcon控件还不是很完善,可以使用自定义TrayIcon类来实现:
以下是我平时整理的TrayIcon类希望对你有用:
自定义TrayIcon类:

//---------------------------------------------------------------------------

#ifndef TrayIconH
#define TrayIconH
//---------------------------------------------------------------------------
#define ICON_MESSAGE (WM_USER+111)
class TRAYICON
{
// Private Attributes
private:
HWND m_hWnd;
//托盘图标
NOTIFYICONDATA icondata;

public:
TRAYICON(HWND hWnd);
~TRAYICON();
//TrayIcon编程:移除任务栏上的图标
void RemoveTrayIcon();
//TrayIcon编程:加任务栏上的图标
void AddTrayIcon(AnsiString title,AnsiString info);
//更改TrayIcon的图标
void ChangeTrayIcon(AnsiString title,AnsiString info,HICON Icon);
};
//---------------------------------------------------------------------------
#endif


//---------------------------------------------------------------------------
#include <vcl.h>

#pragma hdrstop
#include "TrayIcon.h"
#pragma package(smart_init)
//------------------------------------------------------------------------------------
TRAYICON::TRAYICON(HWND hWnd)
{
m_hWnd=hWnd;
}
//------------------------------------------------------------------------------------
TRAYICON::~TRAYICON()
{
RemoveTrayIcon();
}
//------------------------------------------------------------------------------------
//***********************TrayIco编程*******************************************//
//* 气泡提示的实现 *//
//* title:气泡提示标题栏 *//
//* info:气泡提示的内容 *//
//*******************AddTrayIcon(String title,String info)****************//

void TRAYICON::AddTrayIcon(AnsiString title,AnsiString info)
{
memset(&icondata,0,sizeof(icondata));
icondata.cbSize=sizeof(icondata);
icondata.hWnd=m_hWnd;
icondata.hIcon=Application->Icon->Handle;
strncpy(icondata.szTip,Application->Title.c_str(),sizeof(icondata.szTip));
//自定义消息用于鼠标右键popumenu的实现
icondata.uCallbackMessage=ICON_MESSAGE;
icondata.uFlags=NIF_MESSAGE|NIF_INFO|NIF_ICON;
icondata.uTimeout=500;
icondata.dwInfoFlags=NIIF_INFO;
strcpy(icondata.szInfoTitle,title.c_str());
strcpy(icondata.szInfo,info.c_str());

Shell_NotifyIcon(NIM_ADD,&icondata);
}
//==================== RemoveTrayIcon()=========================================
//* 气泡消息的删除
//******************************************************************************
void TRAYICON::RemoveTrayIcon()
{
Shell_NotifyIcon(NIM_DELETE,&icondata);
}
//******************************************************************************
//更改TrayIco的图标
void TRAYICON::ChangeTrayIcon(AnsiString title,AnsiString info,HICON Icon)
{
icondata.hIcon=Icon;
strcpy(icondata.szInfoTitle,title.c_str());
strcpy(icondata.szInfo,info.c_str());
strncpy(icondata.szTip,(title+"\n状态:"+info).c_str(),sizeof(icondata.szTip));

Shell_NotifyIcon(NIM_MODIFY,&icondata);
}
//-----------------------------------------------------------------------------------------

具体应用如下:
在你的工程文件添加如下:

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "TrayIcon.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

TRAYICON *TrayIcon=NULL;//系统托盘
。。。。。。
//---------------------------------------------------------------------------
//窗体创建
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//TrayIcon=new TRAYICON(Handle);//系统托盘类
//TrayIcon->AddTrayIcon("标题","内容");
}
//---------------------------------------------------------------------------
//重载消息处理WndProc()函数,响应托盘右键消息
void __fastcall TForm1::WndProc(TMessage &Msg)
{
//重载TForm1的WndProc函数,加入对自定义消息的处理代码,
if(Msg.Msg==ICON_MESSAGE)
{
if(Msg.LParam==WM_RBUTTONDOWN)
{
POINT mouse;
GetCursorPos(&mouse);//如果双击图标,弹出菜单
PopupMenu1->Popup(mouse.x,mouse.y);
}
}
TForm::WndProc(Msg);
}
//---------------------------------------------------------------------------
//窗体关闭
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(TrayIcon!=NULL)
{
TrayIcon->RemoveTrayIcon();//从任务栏移除TrayIcon
delete TrayIcon;//释放TrayIcon
}
}
//---------------------------------------------------------------------------
//单击button1控件,在系统托盘图标里,出现气泡提示
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(TrayIcon==NULL)
{
TrayIcon=new TRAYICON(Handle);//系统托盘类
}
TrayIcon->AddTrayIcon("标题","内容");
}
//---------------------------------------------------------------------------
//单击button2控件,修改气泡提示的内容
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(TrayIcon!=NULL)
{
TrayIcon->ChangeTrayIcon("修改标题","修改气泡提示的内容",Application->Icon->Handle);//系统托盘显示
}
}
//---------------------------------------------------------------------------

sw4419 2010-07-09
  • 打赏
  • 举报
回复
没人遇到类似的问题吗?
sw4419 2010-07-09
  • 打赏
  • 举报
回复
ide环境CB6,谢谢大家

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧