如何取得鼠标点击时的位置(50分)

  • 主题发起人 主题发起人 fanhongwei
  • 开始时间 开始时间
F

fanhongwei

Unregistered / Unconfirmed
GUEST, unregistred user!
在床体中的listview上单击鼠标,在鼠标的位置显示PopUpMenu1。但是取到的位置
在listview以外,如何实现?
坐标中加入窗体的left和top报错。

PopUpMenu1.Popup(ListView1.Left + X + 5,
ListView1.Top + Y + 25);
 
"但是取到的位置在listview以外"
是什么意思?
。。。。
你可以用getcursorpos(p),来取得当前相对于屏幕的坐标,
然后popupmenu1.popup(p.x,p.y)
 
只要将listview的PopupMenu属性关联到你想要弹出的PopupMenu上,这不就可以自动弹出了么,难道还需要写什么代码?
 
To xiao_min

getcursorpos(p)中的p应该如何定义,

我不能将弹出菜单不想和属性进行关联,因为菜单随时变化
 
用MOUSE.x,mouse.y就可以返回鼠标在SCREEN中的位置。
 
我试了一下,下面这样写应该可以,弹出菜单的位置很漂亮,我觉得应该可以了。
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
PopupMenu1.Popup(Form1.Left + ListView1.Left + X + 5, Form1.Top + ListView1.Top + Y + 25);
end;
 
var mousept: TPoint; //鼠标点击位置
begin
inherited;
getcursorpos(mousept); //获取光标位置
popupmenu1.popup(mousept.x, mousept.y);
 
再给你一个简单的:
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
PopupMenu1.Popup(mouse.CursorPos.x, mouse.CursorPos.y);
end;

这样写更方便,也不需要考虑什么Form和ListView的位置了。
 
to all:好象在MouseUp事件中好些!
 
private
{ Private declarations }
procedure wmlbuttonup(var msg:twmlbuttonup);message wm_lbuttonup;


procedure tform1.wmlbuttonup(var msg:twmlbuttonup);
begin
showmessage('你按下了鼠标左键!'#13#10'横坐标:'+inttostr(loword(msg.XPos))+'纵坐标:'+inttostr(loword(msg.YPos)));
end;
 
谢谢大家
 
后退
顶部