Delphi 将鼠标环绕在屏幕边缘
问题描述 我有一个Delphi组件。要设置值,可以单击并拖动 然而,当你到达屏幕边缘时,你不能再往前走了。然后,您需要返回组件并进一步拖动,这对用户来说不是很友好 首选解决方案 我想让鼠标光标环绕屏幕,如果你到达一个边缘,那么你可以继续滚动一个值。3dsmax广泛使用这种类型的GUI控件,我喜欢它的工作方式 或者,如果光标离开屏幕,但继续发送超出屏幕边界的X/Y坐标,对我来说也可以 到目前为止我拥有的 我知道我可以通过mouse.CursorPos获取/设置当前鼠标位置,并且可以通过screen.Width和screen.Height获取屏幕尺寸 下面的代码确实按照我想要的方式包装了鼠标器Delphi 将鼠标环绕在屏幕边缘,delphi,mouse,cursor-position,Delphi,Mouse,Cursor Position,问题描述 我有一个Delphi组件。要设置值,可以单击并拖动 然而,当你到达屏幕边缘时,你不能再往前走了。然后,您需要返回组件并进一步拖动,这对用户来说不是很友好 首选解决方案 我想让鼠标光标环绕屏幕,如果你到达一个边缘,那么你可以继续滚动一个值。3dsmax广泛使用这种类型的GUI控件,我喜欢它的工作方式 或者,如果光标离开屏幕,但继续发送超出屏幕边界的X/Y坐标,对我来说也可以 到目前为止我拥有的 我知道我可以通过mouse.CursorPos获取/设置当前鼠标位置,并且可以通过screen
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;
过程tformxxx.YYYYMouseMove(发送方:TObject;Shift:TShiftState;X,Y:Integer);
变量
LX,LY:整数;
开始
LX:=Mouse.CursorPos.X;
如果LX<1,则
LX:=屏幕宽度-1
其他的
如果LX>Screen.Width-2,则
LX:=0;
LY:=Mouse.CursorPos.Y;
如果LY<1,则
LY:=屏幕高度-1
其他的
如果LY>Screen.Height-2,则
LY:=0;
Mouse.CursorPos:=点(LX,LY);
结束;
仍然存在一个问题,我必须“手动”跟踪包裹,以从起点获得适当的偏移,但我会找到解决方法
我只是不知道这样做是否合适。也许有人对此有一些经验或明智的说法
主要问题
是否有一种经过验证的通用方法?
windows是否提供了这样的功能
我有一些疑问
- 当有多个监视器时,这将如何表现李>
- 如果用户通过慢速(VNC?)连接,会发生什么情况。。光标位置是否始终达到0或屏幕的另一端
- 如果输入控件不是鼠标,而是画板或触摸屏,会发生什么
- 改变鼠标位置是一种不好的做法吗?我可以想象,用户不喜欢我的应用程序弄乱他们的鼠标光标位置