自己定义的托盘图标菜单弹出后为什么点击桌面不能让其消失?(50分)

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

sunly

Unregistered / Unconfirmed
GUEST, unregistred user!
问题如题目,我自己作了个托盘图标,点击可以弹出个菜单,用以下代码实现弹出:
procedure TCenterForm.WndProc(var Msg : TMessage);
var
p : TPoint;
begin
case Msg.Msg of
WM_USER + 1:
if (Msg.lParam=WM_RBUTTONDOWN) or (Msg.lParam=WM_LBUTTONDOWN) then
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x, p.y);
end;
end;
inherited;
end;
问题是菜单弹出后只有点中菜单中的一项或者点击应用程序界面才能让菜单消失,而点击桌面则不能让其消失,顽固的贴在那里,而我发现其它程序的托盘菜单只要失去焦点就会自动消失,我的为什么不行呢,郁闷~~请高手指点迷津!
 
用COOLTRAYICON控件,简单有效,还有托盘图标闪动及气球样提示框效果。
 
加上
if (Screen.ActiveForm <> nil) and (Screen.ActiveForm.Handle <> 0) then
SetForegroundWindow(Screen.ActiveForm.Handle);
试试.
 
这么用可以在我的机器上
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls,ShellAPI;
const
WM_TrayMessage=WM_User+100;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;

public
{ Public declarations }
procedure WMTrayMessage(var msg:TMessage);message WM_TrayMessage;
end;

procedure TForm1.WMTrayMessage(var msg: TMessage);
var
p:TPoint;
begin
if msg.LParam=WM_LButtonDown then
begin
MessageDlg('您应该单击右键', mtInformation, [mbOK], 0);
end
else if msg.LParam=WM_RButtonDown then
begin
GetCursorPos(p); //取光标位置
PopupMenu1.Popup(p.x,p.y); //弹出菜单
end;
end;
 
谢谢大家帮忙,问题解决了
 

Similar threads

I
回复
0
查看
458
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
578
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部