-2

我希望用户能够在启动时将鼠标光标位置设置在他们选择的 TDBGrid 中的项目上。

我有一个弹出菜单,CursorPoint 是一个全局 TPoint,其 X 和 Y 保存到 .ini 文件并在启动时加载。但目前它对光标没有任何作用。

在菜单弹出...

procedure TfrmMain.mnuGridPopup(Sender: TObject);
begin
  Windows.GetCursorPos(CursorPoint);
end;

然后,为了测试我有一个 TButton 的位置

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  Mouse.CursorPos:=ClientToScreen(CursorPoint);
end;

那也不会移动光标,所以,我做错了什么?

4

1 回答 1

2

当您调用时,Windows.GetCursorPos(CursorPoint);您使用屏幕坐标而不是窗口特定坐标来获取鼠标光标位置。但是稍后您将这些坐标视为特定于窗口的坐标ClientToScreen(CursorPoint);。这当然会导致您尝试将鼠标光标移动到错误的位置。

因此,当您保存鼠标光标位置时,请确保在使用ScreenToClient()方法保存它们之前将这些坐标转换为特定于窗口的坐标。

但除此之外,正如 Warren P 所提到的,并非所有用户都希望您的应用程序移动他们的鼠标光标。为什么?因为他们将无法找到它,并且最终会通过不稳定的鼠标移动来找出光标所在的位置。因此,一旦他们这样做,您的方法就失去了目的。

于 2014-07-28T16:59:55.747 回答