如何通过鼠标移动 或 鼠标左键 激活popmenu??(18分)

  • 主题发起人 主题发起人 Dale46
  • 开始时间 开始时间
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var P:Tpoint;
begin
GetCursorPos(P);
PopUpMenu1.Popup(P.x,P.y); //MouseMove 同样
end;
 
比如:当鼠标移到button1上,popup出PopUpMenu1
那么当鼠标移出button1时,如何自动关闭PopUpMenu1?
 
对于ggcat回答的问题;
要注意相对屏幕坐标与相对控制坐标问题。要在控制当前位置弹出popupmenu,应把代换为
p:=clienttoscreen(p);
有些控件,如button,在属性popupmenu中有选择是左键还是右键激活popupmenu控件.
鼠标移出控件时关闭pupupmenu,可以在onexit(失去焦点)事件中弹出去一个空popupmenu(如
popupmenu2);
 
更正:
ggcat回答问题没有错误,抱歉!
 
只好用WM_MOUSEMOVE和WM_LBUTTONDOWN处理
在着两个消息过程里判断鼠标的坐标,把按钮的位置转换ClientToSreen();看看范围咯!
 
使用CM_MOUSEENTER和CM_MOUSELEAVE就能满足这种效果了.
 
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var P:Tpoint;
begin
GetCursorPos(P);
p:=ClientToSreen(p);
PopUpMenu1.Popup(P.x,P.y);
end;
procedure TForm1.Button1MouseMove(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var P:Tpoint;
begin
GetCursorPos(P);
p:=ClientToSreen(p);
PopUpMenu1.Popup(P.x,P.y);
end;

 
多人接受答案了。
 
后退
顶部