如何将坐标保持在屏幕范围内?

时间:2010-07-13 09:20:55

标签: delphi

这是我的代码... 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 个答案:

答案 0 :(得分:2)

您可以通过计算(curX + tmpX)mod(screenSizeX)或使用curX限制curX:= min(curX+tmpX, screenSizeX)值来创建周期性边界条件。

答案 1 :(得分:1)

如果您正确限制它,它将不会超出您的范围。如果您想知道它为何被破坏,请发布您的代码。

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

您必须小心了解您的限制是否已关闭系统中的所有屏幕,而不仅仅是当前屏幕。不是每个人都只有一个屏幕。有些人有多个屏幕。