Как мне сохранить мои координаты в пределах экрана? - PullRequest
1 голос
/ 13 июля 2010

Это мой код ... curX и curY - мои текущие координаты X и Y, в то время как tmpX и tmpY - относительные значения X и Y (насколько мышь переместилась).

curX:= curX+tmpX;
curY:= curY+tmpY;

Я использую эти значения для перемещения / управления моей форме курсора.
Как сохранить курсоры на экране?

Я пытался ограничить значения до Screen.Height и Screen.Width ... вот код.

if(curX>Screen.Width) then
  curX:=Screen.Width;
if(curY>Screen.Height) then
  curY:=Screen.Height;

но это не сработало.


Решено! (вроде):

curX:= max(0, min((curX+tmpX), Screen.Width));
curY:= max(0, min((curY+tmpY), Screen.Height));

Единственная проблема, с которой я столкнулся, заключается в том, что (0,0), по-видимому, не является самой верхней левой частью (очень близко, хотя, думаю, всего на пару пикселей), а (Screen.Width, Screen.Height) не является верхней самый правый (также близко, курсор исчезает в самом правом, хотя я думаю, что один должен вести себя так).

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Вы можете создавать периодические граничные условия, вычисляя (curX + tmpX) mod (screenSizeX) или ограничивая значения curX с помощью curX:= min(curX+tmpX, screenSizeX).

1 голос
/ 13 июля 2010

Если вы правильно ограничите его, он не выйдет за пределы вашего диапазона.Опубликуйте свой код, если хотите узнать, почему он сломан.

var1 := Inc(var1,amt);
var2 := Inc(var1,amt);
if var1 > limit1 then
    var1 := limit1;
if var2 > limit2 then
    var2 := limit2;

Вы должны быть осторожны, чтобы узнать, не превышает ли ваш предел все экраны в вашей системе, а не только текущий экран.не у всех есть только один экран.У некоторых людей есть несколько экранов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...