当前位置:主页>销售管理软件> 列表

托盘问题 找财务软件免费版下载

记账软件版1楼: 为何我做的托盘在菜单弹出后,如果不进行选择就不自动消失?
我想要的效果是,菜单弹出后,单击非菜单区域,菜单就自动消失。

2楼: 帮忙看看
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, Sockets,Registry, DB, ADODB,//idwinsock,
ComCtrls, ImgList, Menus, shellapi, ExtCtrls, MPlayer;
Const
my_=WM_user + 1; //自定义消息
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N3: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;

procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N3Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
//最小化到任务栏
procedure Wmmy_(var message:Tmessage);message my_;//任务栏弹出菜单
procedure closeicon;

{ Private declarations }
public

{ Public declarations }


end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure Tform1.Wmmy_(var message:Tmessage); { TODO -o1 : 任务栏弹出菜单 }
var
Pt: Tpoint;
begin
If (message.lParam = WM_RBUTTONDOWN) Then
Begin
GetCursorPos(pt);
PopupMenu1.Popup(pt.x, pt.Y);
End;
If (message.LParam = WM_LBUTTONDBLCLK) then
Begin
N1.OnClick(Self);
End;
end;

procedure TForm1.closeicon; { TODO -o1 : 关闭托盘图标 }
var
LpData: PNotifyIconData;
begin
LpData := New(PNotifyIconDataA);
LpData.Wnd := Form1.Handle;
Shell_NotifyIcon(NIM_DELETE, lpData);
Dispose(LpData);
end;

procedure Tform1.WMSysCommand( var Message: TMessage); { TODO -o1 : 加到任务栏 }
var
lpData:PNotifyIconData;
begin
If Message.WParam = SC_ICON then // 最小化SC_MINIMIZE
Begin
lpData := New(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.Handle;
lpData.hIcon := application.Icon.Handle;
lpData.uCallbackMessage := my_;
lpData.uID := 0;
lpData.szTip := ''server'';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
Dispose(lpData);
Form1.Visible := False;
End
Else
If message.WParam = SC_CLOSE then //屏蔽关闭
Begin
Form1.perform(WM_SYSCOMMAND, SC_ICON,0);
End Else
Begin //系统自动执行
DefWindowProc(Form1.Handle, Message.Msg, Message.WParam, Message.LParam);
End;
End;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Closeicon; //关闭任务栏图标
Application.Terminate;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N1Click(Sender: TObject);
begin
If Form1.Visible Then
Begin
Form1.Visible := False;
End Else
Begin
Form1.Show;
End;
end;

end. 如财务软件免费版下载

3楼: 利用鼠标钩子实现吧,鼠标单击区域在弹出菜单外则隐藏菜单!

4楼: 用托盤控件非常方便的。


http://www.delphifans.com/SoftView/SoftView_2112.html

5楼: 呵呵,一句代码就可以搞定了
procedure TFrmMain.IconOnClick;
var
pt:TPoint;
begin
if (Msg.LParam=WM_LBUTTONDOWN) then
begin
FrmMain.Show;
FrmMain.WindowState:=wsNormal;
SetForegroundWindow(FrmMain.Handle);
exit;
end;
if (Msg.LParam=WM_RBUTTONDOWN) then
begin
GetCursorPos(pt);
SetForegroundWindow(Handle); //就是这句了,放在你的菜单弹出代码之前就可以了
Frm_Menu.Popup(pt.x, pt.y);
end;
end;

6楼: 谢谢mysirius
SetForegroundWindow(Handle):是什么意思?

记账软件版7楼: SetForegroundWindow(Handle):
就是将窗口显示在最前面啊

8楼: 多人接受答案了。