описание проблемы
У меня есть компонент Delphi. Чтобы установить значение, вы можете нажать и перетащить.
Однако, когда вы достигнете края экрана, вы не сможете идти дальше. Затем вам нужно вернуться к компоненту и перетащить дальше, что не очень удобно для пользователя.
предпочтительное решение
Мне бы хотелось, чтобы курсор мыши обернулся вокруг экрана, если вы дойдете до края, чтобы вы могли продолжать прокручивать значение. 3dsmax широко использует этот тип управления графическим интерфейсом, и мне нравится, как это работает.
В качестве альтернативы, для меня было бы хорошо, если курсор выходит за пределы экрана, но продолжает посылать координаты 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 или другого крайнего конца экрана?
- Что произойдет, если в качестве элемента управления вводом используется не мышь, а блокнот или сенсорный экран?
- Это плохая практика, чтобы изменить положение мыши? Я могу представить, что пользователям не нравится, когда мое приложение портит положение курсора мыши.