gpt4 book ai didi

delphi - 将鼠标环绕屏幕边缘

转载 作者:行者123 更新时间:2023-12-03 15:53:26 26 4
gpt4 key购买 nike

问题描述

我有一个 Delphi 组件。要设置值,您可以单击并拖动。

但是,当您到达屏幕边缘时,您将无法再继续前进。然后需要返回组件并进一步拖动,这不太人性化。

首选解决方案

我想要的是,如果到达边缘,让鼠标光标环绕屏幕,这样您就可以继续滚动值。 3dsmax 广泛使用这种类型的 GUI 控件,我喜欢它的工作原理。

或者,如果光标移出屏幕,但继续发送超出屏幕范围的 X/Y 坐标,那对我来说也没什么问题。

到目前为止我所拥有的

我知道我可以通过 Mouse.CursorPos 获取/设置当前鼠标位置,并且可以通过 Screen.Width 和 Screen.Height 获取屏幕尺寸。

下面的代码确实按照我想要的方式包裹鼠标光标。

procedure TFormXXXX.YYYYMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
LX, LY: Integer;
begin
LX := Mouse.CursorPos.X;
if LX < 1 then
LX := Screen.Width - 1
else
if LX>Screen.Width -2 then
LX := 0;

LY := Mouse.CursorPos.Y;
if LY < 1 then
LY := Screen.Height - 1
else
if LY>Screen.Height -2 then
LY := 0;

Mouse.CursorPos := Point(LX, LY);
end;

仍然存在一个问题,我必须“手动”跟踪环绕以获得距起点的正确偏移量,但我会找到一种方法来解决这个问题。

我只是不知道这是否是执行此操作的正确方法。也许有人对此有一些经验或明智的说法......

主要问题

是否有经过尝试和测试的通用方法?Windows 是否提供了类似这样的东西?

我有一些疑问

  • 当有多个显示器时,这会如何表现?
  • 如果用户通过慢速(VNC?)连接进行连接,会发生什么情况?光标位置是否会始终到达 0 或屏幕的另一端?
  • 如果输入控件不是鼠标,而是画板或触摸屏,会发生什么情况?
  • 更改鼠标位置是不好的做法吗?我可以想象用户不喜欢我的应用程序弄乱他们的鼠标光标位置。

最佳答案

您可以通过增加与控件的距离来加速变化,而不是使用简单的线性刻度,并在超过该值后开始自动递增。基本上它的工作原理就像拖动选择文本一样,一旦鼠标到达窗口底部,窗口就开始滚动,即使鼠标到达该点后就停止移动。

关于delphi - 将鼠标环绕屏幕边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4090630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com