问题描述
我有一个Delphi组件。要设置值,可以单击并拖动。
但是,当你到达屏幕的边缘时,你不能再往前走了。然后,您需要返回到组件并进一步拖动,这不是非常友好的用户界面。
优选方案
或者,如果光标离开屏幕,但继续发送超出屏幕边界的X/Y坐标,对我来说也没问题。
我知道我可以通过mouse.CursorPos获取/设置当前鼠标位置,屏幕尺寸可以通过screen.Width和screen.Height获得。
下面的代码确实按照我想要的方式包装mousecursor。
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;
仍然有一个问题,我必须“手动”跟踪包装,以获得一个适当的偏移起点,但我会找到一个办法来解决这个问题。
主要问题
有没有一个经过测试的通用方法来解决这个问题?
我有些怀疑
-
-
如果用户通过慢速(VNC)连接,会发生什么情况连接。。光标位置是否总是达到0或屏幕的另一端?
-
如果输入控件不是鼠标,而是画板或触摸屏,会发生什么?
-
改变鼠标位置是不是不好?我可以想象用户不喜欢我的应用程序弄乱他们的鼠标光标位置。