图标成功载入状态区,可是无论是双击还是单击图标,程序都没有执行相应的操作,不知道是为什么,代码如下,请各位帮忙看看:
const
CM_RESTORE=WM_USER+$1000; //自定义”恢复“消息
GDJT_APP_NAME='GDJT_Sysytem';
const
ID_MAIN=100;
WM_GDJTNOTIFY=WM_USER+100;
strNotifyTip='轨道交通资料管理服务器';//状态区的提示消息
//定义的图标ID;//恢复消息
procedure TServerForm.RestoreRequest(var message:TMessage);
begin
if IsIconic(Application.Handle)=true then
Application.Restore //恢复窗体
else
Application.BringToFront;
end;//在状态区添加图标
function TServerForm.AddIcon(hwnd:HWND):boolean;
begin
nid.cbSize:=sizeof(NOTIFYICONDATA);
nid.Wnd:=hwnd;
nid.uID:=ID_MAIN;
nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP; //这里已经重新设置了有效参数了
nid.hIcon:=LoadICON(hInstance,'MAINICON');
strCopy(nid.szTip,strNotifyTip);
AddIcon:=Shell_NotifyIcon(NIM_ADD,@nid);
end;//从状态区移去图标
function TServerForm.RemoveIcon(hwnd:HWND):boolean;
var
nid:NOTIFYICONDATA;
begin
nid.cbSize:=Sizeof(NOTIFYICONDATA);
nid.Wnd:=hwnd;
nid.uID:=ID_MAIN;
nid.uFlags:=0;
RemoveICON:=Shell_NotifyIcon(NIM_DELETE,@nid);
end;//自定义消息处理函数-无论怎么点击,程序就是没有反应
procedure TServerForm.Notify(var msg:TMessage);
var
pt:TPoint;
begin
case msg.LParam of
WM_RBUTTONDOWN: //当点击右键时,弹出快捷菜单
begin
SetForeGroundWindow(nid.wnd);
GetCursorPos(Pt);
Popupmenu.Popup(pt.x, pt.y);
end;
WM_LBUTTONDOWN: //左键按下,窗体置前
Application.MainForm.BringToFront;
WM_LBUTTONDBLCLK: //左键双击时
SetForegroundWindow(Application.Handle);
end;
end;
const
CM_RESTORE=WM_USER+$1000; //自定义”恢复“消息
GDJT_APP_NAME='GDJT_Sysytem';
const
ID_MAIN=100;
WM_GDJTNOTIFY=WM_USER+100;
strNotifyTip='轨道交通资料管理服务器';//状态区的提示消息
//定义的图标ID;//恢复消息
procedure TServerForm.RestoreRequest(var message:TMessage);
begin
if IsIconic(Application.Handle)=true then
Application.Restore //恢复窗体
else
Application.BringToFront;
end;//在状态区添加图标
function TServerForm.AddIcon(hwnd:HWND):boolean;
begin
nid.cbSize:=sizeof(NOTIFYICONDATA);
nid.Wnd:=hwnd;
nid.uID:=ID_MAIN;
nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP; //这里已经重新设置了有效参数了
nid.hIcon:=LoadICON(hInstance,'MAINICON');
strCopy(nid.szTip,strNotifyTip);
AddIcon:=Shell_NotifyIcon(NIM_ADD,@nid);
end;//从状态区移去图标
function TServerForm.RemoveIcon(hwnd:HWND):boolean;
var
nid:NOTIFYICONDATA;
begin
nid.cbSize:=Sizeof(NOTIFYICONDATA);
nid.Wnd:=hwnd;
nid.uID:=ID_MAIN;
nid.uFlags:=0;
RemoveICON:=Shell_NotifyIcon(NIM_DELETE,@nid);
end;//自定义消息处理函数-无论怎么点击,程序就是没有反应
procedure TServerForm.Notify(var msg:TMessage);
var
pt:TPoint;
begin
case msg.LParam of
WM_RBUTTONDOWN: //当点击右键时,弹出快捷菜单
begin
SetForeGroundWindow(nid.wnd);
GetCursorPos(Pt);
Popupmenu.Popup(pt.x, pt.y);
end;
WM_LBUTTONDOWN: //左键按下,窗体置前
Application.MainForm.BringToFront;
WM_LBUTTONDBLCLK: //左键双击时
SetForegroundWindow(Application.Handle);
end;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI, ImgList, Menus;const WM_NOTIFY = WM_USER + 101; // TRAY消息
WM_TOOLTRAYICON = WM_USER+1;
type
TfrmMain = class(TForm)
imlToolbar: TImageList;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
procedure OnAppMinimize(Sender: TObject); // 应用程序最小化响应函数
procedure OnNotify(var Msg : TMessage); message WM_NOTIFY;
procedure ToolMSG(var Msg: TWMSYSCOMMAND); Message WM_TOOLTRAYICON;
public
{ Public declarations }
end;var
frmMain: TfrmMain;
NotifyIcon : TNotifyIconData;implementation{$R *.dfm}procedure TfrmMain.FormCreate(Sender: TObject);
var
Icon : TIcon;
begin //
//NotifyIcon为全局变量,在程序的开头已经定义了
//
with NotifyIcon do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle; //指向当前窗体frmMain的句柄
uID:=1;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage:=WM_NOTIFY;
hIcon:=Application.Icon.Handle;
icon := TIcon.Create();
frmmain.imlToolbar.GetIcon(0, icon);
hIcon := icon.Handle;
szTip:='短信程序';
end;
Application.OnMinimize := OnAppMinimize;
end;//
// 应用程序最小化时调用此函数
//
procedure TfrmMain.OnAppMinimize(Sender: TObject);
begin
// if Config.m_Config.m_Hide then
// begin
frmMain.Visible := False;
//
// 把设置好的变量NotifyIcon加入到系统中以便处理
//
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
// end;
end;//
// 托盘图标响应事件
//
procedure TfrmMain.OnNotify(var Msg: TMessage);
var
pos : TPoint;
begin
case Msg.LParam of
WM_LBUTTONDBLCLK: // 双击事件
begin
frmMain.Visible := True ;
Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
Application.Restore();
SetForegroundWindow(frmMain.Handle);
end;
WM_RBUTTONUP: // 右键点击
begin
GetCursorPos(pos);
frmMain.PopupMenu1.Popup(pos.X, pos.Y);
end;
End;
end;procedure TfrmMain.N1Click(Sender: TObject);
begin
close;
end;procedure TfrmMain.ToolMSG(var Msg: TWMSYSCOMMAND);
begin
if (Msg.Msg = WM_TOOLTRAYICON) and
(Msg.Key = WM_LBUTTONDBLCLK) then
showwindow(application.handle,sw_show);
end;end.
uCallBackMessage:=WM_NOTIFY;