应该很简单,看看就知道。(100分)

  • 主题发起人 主题发起人 solley
  • 开始时间 开始时间
S

solley

Unregistered / Unconfirmed
GUEST, unregistred user!
//我的问题是:怎样才能让缩到任务栏的图标能在点右键时显示菜单?
//就像右键点“超级解霸”在任务栏的图标出现的效果一样。
procedure TForm1.FormCreate(Sender: TObject);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数

nid.Wnd := Handle; // 主窗口句柄

nid.uID := 1; // 内部标识,可设为任意数

nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指?

nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指?

nid.szTip := '北京万方港佳FTP服务器'; // 提示字符串

nid.uCallbackMessage := MY_MESSAGE; // 回调函数消息

nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有?


if not Shell_NotifyIcon(NIM_ADD,@nid) then
begin
ShowMessage('失败!');
Application.Terminate;
end;
end;
 
。。。
const
WM_MIDASICON = WM_USER + 1;
UI_INITIALIZE = WM_MIDASICON + 1;

type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
。。。
private
{ Private declarations }
。。。
protected
procedure WMMIDASIcon(var Message: TMessage); message WM_MIDASICON;

public
{ Public declarations }
end;
procedure TForm1.WMMIDASIcon(var Message: TMessage);
var
pt: TPoint;
begin
case Message.LParam of
WM_RBUTTONUP:
begin
if not Visible then
begin
SetForegroundWindow(Handle);
GetCursorPos(pt);
PopupMenu.Popup(pt.x, pt.y);
end else
SetForegroundWindow(Handle);
end;
WM_LBUTTONDBLCLK:
if Visible then
SetForegroundWindow(Handle)
else
// SendMessage(handle,WM_SYSCOMMAND,SC_RESTORE,0);
show;
end;
end;
 
放一个PopupMenu!
 
有好多控件都可以的,例如:Rxlib,CoolControls,等中均有TrayIcon控件。加上一个
PopupMenu 即可!~
 
WM_MIDASICON = WM_USER + 2
procedure WMIcon(var Message: TMessage);message WM_MIDASICON;

procedure Tform1.WMIcon(var Message: TMessage);
var
pt: TPoint;
begin
if not form1.Visible then
begin
case Message.LParam of
WM_RBUTTONUP:
begin
SetForegroundWindow(Handle);
GetCursorPos(pt);
pmClose.Popup(pt.x, pt.y);
end;
WM_LBUTTONDBLCLK:
begin
SetForegroundWindow(Handle);
GetCursorPos(pt);
pmClose.Popup(pt.x, pt.y);
end;
end;
end;
end;


 
放一个popupmenu,然后再FORM里面指定一下就可以了
 
后退
顶部