嗨,我'由形式组成的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的高度,但我无法获得主菜单的高度。
答案 0 :(得分:5)
为什么不使用OnMouseDown event和OnMouseUp 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;