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,更不用说有关使用了哪个鼠标按钮和特殊键状态的信息,例如 Shift、CTRL 和 ALT.
为了更好地解释这些事件提供的信息,请查看 TMouseEvent documentation。
您好,我有 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,更不用说有关使用了哪个鼠标按钮和特殊键状态的信息,例如 Shift、CTRL 和 ALT.
为了更好地解释这些事件提供的信息,请查看 TMouseEvent documentation。