Delphi鼠标点击坐标

时间:2015-01-20 07:36:41

标签: delphi

enter image description here

嗨,我'由形式组成的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 coord。从面板3开始。  我的意思是当我点击面板3'顶部,它的坐标必须为0.

感谢您的建议。

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

2 个答案:

答案 0 :(得分:5)

为什么不使用OnMouseDown eventOnMouseUp event

而不是已经为您提供鼠标单击/释放的X,Y坐标的OnClick事件,更不用说有关使用哪个鼠标按钮的信息以及 Shift <等特殊键的状态/ kbd>, CTRL ALT

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

答案 1 :(得分:2)

要使用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;