1、新建一个工程,将工程存到目录D:\BCBTray下,并在这个目录下拷入一个icon图标文件,文件名为Icon1.ico,作为本程序的系统托盘处的图标。
2、在这个工程中再增加一个窗体Form2,要注意的是这个工程中,Form1是启动窗体,它负责系统托盘图标的总控工作,并不负有其它责任。应用程序的主窗口是由Form2 来负责的。在Form1的代码窗Unit1.cpp增加如下代码:
#include "Unit2.h"
3、将Form1的BorderStyle属性设置为bsNone
4、在Form1的OnShow事件写如下代码:
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form1->Width=0;
}
5、在Form1中增加一个PopupMenu1,并为它增加一个子菜单:它的两个菜单条为:显示网址管理专家、退出程序。
为“显示网址管理专家”写如下单击事件:
void __fastcall TForm1::N1Click(TObject *Sender)
{
Form2->Show();
}
为“退出程序”写如下单击事件:
void __fastcall TForm1::N2Click(TObject *Sender)
{
Form1->Close();
}
6、在Form1的代码头文件Unit1.h中的TForm1的类定义的public成员函数中写下如下代码:
__fastcall ~TForm1();
TIcon *MyIcon;
void virtual __fastcall IconClick(TMessage& Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_USER+100,TMessage,IconClick)
END_MESSAGE_MAP(TForm)
这样,TForm1的类定义全貌为:
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPopupMenu *PopupMenu1;
TMenuItem *N1;
TMenuItem *N2;
void __fastcall N1Click(TObject *Sender);
void __fastcall N2Click(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1();
TIcon *MyIcon;
void virtual __fastcall IconClick(TMessage& Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_USER+100,TMessage,IconClick)
END_MESSAGE_MAP(TForm)
};
7、在Unit1.cpp中的窗体的构造函数中写如下代码:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MyIcon=new TIcon();
TNotifyIconData IconData;
MyIcon->LoadFromFile("Icon1.ico");
IconData.cbSize=sizeof(IconData);
IconData.hWnd=Handle;
IconData.uID=100;
IconData.hIcon=MyIcon->Handle;
IconData.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
IconData.uCallbackMessage=WM_USER+100;
strcpy(IconData.szTip,"网址管理专家 单击左键显示窗体");
Shell_NotifyIcon(NIM_ADD,&IconData);
SetWindowLong(Application->Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
}
8、在Unit1.cpp中的窗体的析构函数中写如下代码:
__fastcall TForm1::~TForm1()
{
TNotifyIconData IconData;
IconData.cbSize=sizeof(IconData);
IconData.hWnd=Handle;
IconData.uID=100;
Shell_NotifyIcon(NIM_DELETE,&IconData);
delete MyIcon;
}
9、在Unit1.cpp中写窗体的公用成员函数IconClick代码:
void __fastcall TForm1::IconClick(TMessage& Msg)
{
TPoint po;
if(Msg.LParam==WM_LBUTTONDOWN)
{
Form2->Show();
}
if(Msg.LParam==WM_RBUTTONUP)
{
GetCursorPos(&po);
PopupMenu1->Popup(po.x,po.y);
}
}
10、由于Shell_NotifyIcon函数定义在ShellAPI.hpp文件中所以请将下面一句写到Unit1.h中:
#include <shellapi.hpp>
11、现在运行程序,系统图标就写到托盘中去了。
正文