Delphi 单击控件时如何获取鼠标的坐标?

Delphi 单击控件时如何获取鼠标的坐标?,delphi,mouse,timage,Delphi,Mouse,Timage,在TImage的OnClick事件中,我想提取鼠标的x,y坐标。我希望它们与图像相关,但与窗体或窗口相关也一样好。这个怎么样 procedure TForm1.Button1Click(Sender: TObject); var MausPos: TPoint; begin GetCursorPos(MausPos); label1.Caption := IntToStr(MausPos.x); label2.Caption := IntToStr(MausPos.y); end;

在TImage的OnClick事件中,我想提取鼠标的x,y坐标。我希望它们与图像相关,但与窗体或窗口相关也一样好。

这个怎么样

procedure TForm1.Button1Click(Sender: TObject);
var
MausPos: TPoint;
begin
  GetCursorPos(MausPos);
  label1.Caption := IntToStr(MausPos.x);
  label2.Caption := IntToStr(MausPos.y);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  SetCursorPos(600, 600);
end;
有一次在某个地方在线找到此代码,并将其保存在我的代码段数据库中:)

可能会解决你所有的问题但是。。。似乎有从客户端到屏幕坐标和返回等功能


祝你好运

Mouse.CursorPos包含TPoint,而TPoint又包含X和Y位置。该值以全局坐标表示,因此可以使用ScreenToClient例程将屏幕坐标转换为窗口坐标,从而转换为表单

根据Delphi帮助文件,Windows.GetCursorPos可能会失败,如果失败,Mouse.CursorPos会对此进行包装以引发EOsException

var
  pt : tPoint;
begin
  pt := Mouse.CursorPos; 
  // now have SCREEN position
  Label1.Caption := 'X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y);
  pt := ScreenToClient(pt);
  // now have FORM position
  Label2.Caption := 'X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y);
end;

正如其他人所说,您可以使用Mouse.CursorPos或GetCursorPos函数,但也可以只处理OnMouseDown或OnMouseUp事件,而不是OnClick。这样,您就可以将X和Y值作为事件处理程序的参数,而不必进行任何额外的函数调用。

鼠标的
属性将告诉您鼠标的当前位置。如果计算机运行缓慢,或者您的程序对消息响应缓慢,则可能与第一次发生
OnClick
事件时鼠标的位置不同。要获取单击鼠标按钮时鼠标的位置,请使用。它报告屏幕坐标;使用
TImage.ScreenToClient
转换到客户端坐标

另一种方法是自己处理
OnMouseDown
OnMouseUp
事件;它们的参数包括坐标。请记住,这两个事件都需要发生才能发生单击。您可能还想检测拖动操作,因为您可能不想考虑拖动来计数单击。