一个托盘程序
2008-06-12 09:27
387 查看
unit MainUnit; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ShellAPI, ExtCtrls; const ICON_ID= 1; MI_ICONEVENT= WM_USER+ 1; type TMainForm = class(TForm) PopupMenu1: TPopupMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormActivate(Sender: TObject); procedure N1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure N3Click(Sender: TObject); private procedure SetupIcon; //在托盘中安装图标 procedure ChangeIcon(s: Boolean); //改变托盘中的图标 procedure FreeIcon; //在托盘中释放图标 procedure IconOnClick(var Msg: TMessage); message MI_ICONEVENT; //托盘图标电击事件 { Private declarations } public { Public declarations } end; var MainForm: TMainForm; NormalIcon, DisabledIcon: TIcon; //正常和失效情况下的图标 Status: Boolean; //标志是“使用状态”还是“禁用状态” Apath: String; implementation uses ShowUnit; {$R *.DFM} procedure TMainForm.SetupIcon; var IconData: TNotifyIcondata; begin NormalIcon:= TIcon.Create; DisabledIcon:= TIcon.Create; NormalIcon.LoadFromFile(Apath+ '1.ico'); DisabledIcon.LoadFromFile(Apath+ '2.ico'); IconData.cbSize:= SizeOf(IconData); IconData.Wnd:= Handle; IconData.uID:= Icon_ID; IconData.uFlags:= NIF_ICON or NIF_MESSAGE or NIF_TIP; IconData.uCallbackMessage:= MI_ICONEVENT; IconData.hIcon:= NormalIcon.Handle; IconData.szTip:= '新增托盘图标'; Shell_NotifyIcon(NIM_ADD, @IconData); end; procedure TMainForm.ChangeIcon(s: Boolean); var IconData: TNotifyIconData; begin IconData.cbSize:= SizeOf(IconData); IconData.Wnd:= Handle; IconData.uID:= Icon_ID; if s= False then begin IconData.hIcon:= DisabledIcon.Handle; Status:= False; N1.Enabled:= False; end else begin IconData.hIcon:= NormalIcon.Handle; Status:= True; N1.Enabled:= True; end; IconData.uFlags:= NIF_ICON; Shell_NotifyIcon(NIM_MODIFY, @IconData); end; procedure TMainForm.FreeIcon; var IconData: TNotifyIconData; begin IconData.cbSize:= SizeOf(IconData); IconData.Wnd:= Handle; IconData.uID:= Icon_ID; Shell_NotifyIcon(NIM_DELETE, @IconData); end; procedure TMainForm.IconOnClick; var pt: TPoint; begin if (Msg.LParam= WM_LBUTTONDOWN) and (Status= True) then ShowForm.Show; if (Msg.LParam= WM_RBUTTONDOWN) then begin GetCursorPos(pt); PopupMenu1.Popup(pt.x, pt.y); end; end; procedure TMainForm.FormCreate(Sender: TObject); begin Apath:= ExtractFilePath(ParamStr(0)); Status:= True; SetupIcon; ChangeIcon(True); ShowWindow(Application.Handle, SW_HIDE); SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeIcon; NormalIcon.Free; DisabledIcon.Free; end; procedure TMainForm.FormActivate(Sender: TObject); begin MainForm.Width:= 0; MainForm.Height:= 0; ShowWindow(Application.Handle, SW_HIDE); end; procedure TMainForm.N1Click(Sender: TObject); begin ShowForm.Show; end; procedure TMainForm.N2Click(Sender: TObject); begin if Status= True then begin ChangeIcon(False); N2.Caption:= '使用'; end else begin ChangeIcon(True); N2.Caption:= '禁用'; end; end; procedure TMainForm.N3Click(Sender: TObject); begin Close; end; end.
相关文章推荐
- 让一个程序托盘显示,并且右键托盘图标可以弹出菜单
- 一个托盘程序演示 -闹钟 Alert
- 一个消息提示托盘程序的开发历程(采用socket技术,附源代码)三---客户端源代码
- MFC 为程序制作一个系统托盘图标、显示隐藏任务栏图标
- 一个简单的C#托盘程序(本站原创)
- QT 实现一个任务栏托盘图标程序 weathertrayicon
- 一个托盘程序演示 -闹钟 Alert(转载)
- 生成一个系统托盘程序
- 一个消息提示托盘程序的开发历程
- 对程序添加系统托盘图标支持-一个简单的C++封装
- 让一个程序托盘显示,并且右键托盘图标可以弹出菜单
- 一个托盘程序演示 -闹钟 Alert
- 一个带系统托盘的VC++程序编写方法
- 从系统Demo中改的一个 托盘图标带窗体的系统服务程序
- 一个完整托盘程序的实现
- 一个托盘程序, 简化notifyicon的使用.
- wxpython实现程序最小到系统托盘的一个实例
- 一个托盘程序演示 -闹钟 Alert
- 一个消息提示托盘程序的开发历程(采用socket技术,附源代码)一
- 一个完整托盘程序的实现