B
blizzard
Unregistered / Unconfirmed
GUEST, unregistred user!
const
WM_BARICON=WM_USER+200;
.......
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var Message:TMessage);message WM_BARICON;
.......
procedure TForm1.WMSysCommand(var Message:TMessage);
var
lpDataNotifyIconData;
begin
if Message.WParam = SC_ICON then (问题1处)
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Form1.Visible := False;
end;
end;
procedure TForm1.WMBarIcon(var Message:TMessage);
var
lpDataNotifyIconData;
begin
if (Message.LParam = WM_LBUTTONDOWN) then (问题2处)
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Form1.Visible := True;
end;
end;
end.
以上是最小化窗体时将图标缩小到任务栏,单击图标又恢复窗体的一段程序.
现在的问题是:同样是为了鉴别消息的类型为什么在(问题1处)用的Message.WParam而在(问题2处)用的
Message.LParam,而且我认为这两处应该都应该用Message.msg!
1.请问wparam和lparam到底区别在那儿?什么时候用wparam和lparam,在这里将他们位置调换就会出错!
2.我认为在(问题2出)应该用Message.msg,我平时都这么用的,但在这里就会出错,请问这是为什么?
请大家指点!
WM_BARICON=WM_USER+200;
.......
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var Message:TMessage);message WM_BARICON;
.......
procedure TForm1.WMSysCommand(var Message:TMessage);
var
lpDataNotifyIconData;
begin
if Message.WParam = SC_ICON then (问题1处)
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Form1.Visible := False;
end;
end;
procedure TForm1.WMBarIcon(var Message:TMessage);
var
lpDataNotifyIconData;
begin
if (Message.LParam = WM_LBUTTONDOWN) then (问题2处)
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Form1.Visible := True;
end;
end;
end.
以上是最小化窗体时将图标缩小到任务栏,单击图标又恢复窗体的一段程序.
现在的问题是:同样是为了鉴别消息的类型为什么在(问题1处)用的Message.WParam而在(问题2处)用的
Message.LParam,而且我认为这两处应该都应该用Message.msg!
1.请问wparam和lparam到底区别在那儿?什么时候用wparam和lparam,在这里将他们位置调换就会出错!
2.我认为在(问题2出)应该用Message.msg,我平时都这么用的,但在这里就会出错,请问这是为什么?
请大家指点!