请高手:指点!托盘区的图标为何不能响应鼠标的消息???
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ShellApi,
StdCtrls, Buttons, Menus;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
pop1: TPopupMenu;
Y1: TMenuItem;
N1: TMenuItem;
x1: TMenuItem;
BitBtn2: TBitBtn;
procedure InstallIcon;
procedure IconOnClick;
procedure BitBtn1Click(Sender: TObject);
procedure WMTrayNotify(var Msg:TMessage);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.InstallIcon; //把一图标放在托盘区 ----已实现!
var
IconData: TNotifyIconData;
CdRomIcon:Ticon;
begin
CdRomIcon := TIcon.Create;
CdRomIcon.LoadFromFile( 'c:\1.ico' );
IconData.cbSize := SizeOf( IconData );
IconData.Wnd := Handle;
IconData.uID := 1;
IconData.uFlags := NIF_ICON
or NIF_MESSAGE or NIF_TIP;
IconData.uCallBackMessage := WM_USER+1;
IconData.hIcon := CdRomIcon.Handle;
IconData.szTip := 'SOCKET应用服务器';
Shell_NotifyIcon( NIM_ADD, @IconData );
end;
procedure TForm1.BitBtn1Click(Sender: TObject); //一按键调用上述过程
begin
InstallIcon;
end;
procedure TForm1.IconOnClick; //托盘区的图标响应过程 ----- 图标不能响应这个过程???
var
p : TPoint;
message: Tmessage;
begin
if (message.lParam = WM_LBUTTONDOWN) then
ShowWindow(Handle, SW_SHOW );
if (message.lParam = WM_RBUTTONDOWN) then
begin
GetCursorPos(p);
pop1.Popup( p.x ,p.y ); //pop1为在主窗口中定义的弹出式菜单
end;
end;
//*********************************
procedure TForm1.WMTrayNotify(var Msg:TMessage);
const
WM_TRAYNOTIFY=$4444; // 自定义消息;
MY_TRAY_ICON=$4532; // 自定义消息;
var
NT:TNotifyIconData;
begin
if (Msg.LParam <>WM_LBUTTONDBLCLK) then exit;
with NT do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle;
UID:=MY_TRAY_ICON;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallBackMessage:=WM_TRAYNOTIFY;
szTip:=#0;
end;
Shell_NotifyIcon(NIM_DELETE,@NT);
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end;
end.