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

idfiyjo8  于 2023-05-22  发布在  其他
关注(0)|答案(5)|浏览(487)

在TImage的OnClick事件中,我想提取鼠标的x,y坐标。我更喜欢他们在关系的形象,但在关系的形式或窗口是一样好。

siotufzp

siotufzp1#

CursorPos包含TPoint,而TPoint又包含X和Y位置。这个值是全局坐标,因此您可以使用ScreenToClient例程将屏幕坐标转换为窗口坐标。
根据 Delphi 帮助文件,Windows.GetCursorPos可能会失败,Mouse.CursorPos将其 Package ,以在失败时引发EOsException。

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

注意:如果您省略了ScreenToClient方法的“Image1”,它将引用表单。

jtjikinw

jtjikinw2#

Mouse.CursorPos属性将告诉您鼠标的 * 当前 * 位置。如果计算机运行缓慢,或者您的程序对消息的响应缓慢,则它可能与第一次发生OnClick事件时鼠标的位置不同。要获取鼠标单击时的位置 *,请使用GetMessagePos。它报告 * 屏幕坐标 ;使用TImage.ScreenToClient转换为客户端坐标。
另一种方法是自己处理OnMouseDownOnMouseUp事件;它们的参数包括坐标。请记住,
两个 * 事件都需要发生,才能发生 * 单击 *。您可能还希望检测 * 拖动 * 操作,因为您可能不希望将拖动视为单击。

5jdjgkvh

5jdjgkvh3#

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

ibps3vxo

ibps3vxo4#

这个怎么样?

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;

在网上找到了这个,并保存在我的codesnippet数据库中:)
This page可能会解决你所有的问题,但是...似乎有从客户端到屏幕坐标和返回等的函数。
祝你好运!

qqrboqgw

qqrboqgw5#

至Firemonkey(FMX):

var
  p: TPointF;
begin
  p := Screen.MousePos;
end;

相关问题