Delphi鼠标点击坐标

Delphi Mouse Click Coordinates

您好,我有 3 个面板,其中包含表单。 我将点击事件分配给第 3 个面板以获取坐标。

procedure TformMain.Panel3Click(Sender: TObject);
var
  pt : tPoint;
begin
  pt := Mouse.CursorPos;
  ShowMessage('X : ' + IntToStr(pt.X) + ' & Y : ' + IntToStr(pt.Y));
end;

此代码有效,但我不知道如何进行 Y 坐标。从面板 3 的开头开始。 我的意思是当我点击 panel3 的顶部时,它的 y 坐标必须是 0。

谢谢指教。

p.s。 : 我的表单有一个主菜单,所以我试图从 pt.y 中减去 panel1 的高度,但我无法获得主菜单的高度。

要转换坐标,请使用 ClientToScreen()ScreenToClient() 方法:

procedure TformMain.Panel3Click(Sender: TObject);
var
  pt: TPoint;
begin
  // Converting from screen coordinates into Sender (that's Panel3)
  // client area coordinates
  pt := TPanel(Sender).ScreenToClient(Mouse.CursorPos);
  ShowMessage('X : ' + IntToStr(pt.X) + ' & Y : ' + IntToStr(pt.Y));
end;

你为什么不使用 OnMouseDown event and OnMouseUp event

而不是 OnClick 事件,它已经为您提供了鼠标的 X、Y 坐标 click/release,更不用说有关使用了哪个鼠标按钮和特殊键状态的信息,例如 ShiftCTRLALT.

为了更好地解释这些事件提供的信息,请查看 TMouseEvent documentation