Вверх ↑
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
#1: 2015-02-15 23:40:43 ЛС | профиль | цитата
Допустим есть форма, в центре нее "красный квадрат" 200х200 пикселей.
Как ограничить "вхождение" курсора в данный квадрат? требуется чтобы курсор "упирался" в невидимое препятствие.

Я так понимаю нужно найти окно, затем получить его координаты, зная где находится окно и какой у него размер, зная размер "красного квадрата" можно высчитать где находится этот самый "красный квадрат" относительно курсора мыши...а как мышь-то не пустить в него?

п.с. я так понимаю компоненты из вкладки регионы это как раз то что нужно?
карма: 0

0
Разработчик
Ответов: 26306
Рейтинг: 2146
#2: 2015-02-16 00:42:11 ЛС | профиль | цитата
Как-то так можно. Это если с контролами

Add(MainForm,2953706,252,147)
{
Point(onMouseMove)
link(onMouseMove,4130728:doValue,[(291,174)(291,153)])
}
Add(PaintBox,4732755,252,56)
{
Left=135
Top=60
Width=115
Height=105
Color=255
Point(onMouseEnter)
link(onMouseEnter,6798942:doPosition,[])
}
Add(MouseEvent,6798942,364,49)
{
Point(doPosition)
link(X,4130728:Value,[(377,40)(356,40)(356,187)(370,187)])
link(Y,1314269:Value,[(384,40)(454,40)(454,187)(419,187)])
}
Add(Memory,4130728,364,147)
{
Point(Data)
link(onData,1314269:doValue,[])
link(Data,6798942:MouseX,[])
}
Add(Memory,1314269,413,147)
{
Point(Data)
link(Data,6798942:MouseY,[(419,96)(377,96)])
}

карма: 22

1
Голосовали:Gunnman
Ответов: 655
Рейтинг: 18
#3: 2015-02-16 02:34:50 ЛС | профиль | цитата
nesco, Спасибо! Даже квадрат настоящий, а не в кавычках)) пример понятен! Плюсую!
карма: 0

0
Ответов: 2438
Рейтинг: 693
#4: 2015-02-16 11:09:43 ЛС | профиль | цитата
Вариант с использованием регионов: code_35127.txt
карма: 11

1
файлы: 1code_35127.txt [1.6KB] [211]
Голосовали:Gunnman
Ответов: 1536
Рейтинг: 176
#5: 2015-02-16 14:28:18 ЛС | профиль | цитата
С виртуальной областью:
Add(MainForm,6545490,133,63)
{
Width=683
Height=403
Point(onMouseMove)
Point(MouseX)
Point(MouseY)
link(onMouseMove,13192825:doCalc,[])
}
Add(MathParse,13192825,203,84)
{
MathStr="%1>100and%1<200and%2>100and%2<200"
link(onResult,14329849:doCompare,[])
link(X1,6545490:MouseX,[(209,72)(177,72)(177,107)(139,107)])
link(X2,6545490:MouseY,[(216,72)(184,72)(184,107)(146,107)])
}
Add(If_else,14329849,245,84)
{
Type=5
link(onTrue,6798942:doPosition,[])
link(onFalse,4130728:doValue,[(289,97)(289,132)])
}
Add(MouseEvent,6798942,301,70)
{
Point(doPosition)
link(X,4130728:Value,[(314,58)(293,58)(293,171)(307,171)])
link(Y,1314269:Value,[(321,58)(381,58)(381,171)(349,171)])
}
Add(Memory,4130728,301,126)
{
Point(Data)
link(onData,1314269:doValue,[])
link(Data,6798942:MouseX,[])
}
Add(Memory,1314269,343,126)
{
Point(Data)
link(Data,6798942:MouseY,[(349,117)(314,117)])
}
Вариант от sla8a, но без отрисовки и 2 элементов Math:
Add(MainForm,9647406,245,105)
{
Position=1
Point(MouseX)
Point(MouseY)
Point(onPaint)
Point(onMouseMove)
link(onCreate,2143450:doCreateRect,[])
link(onMouseMove,7821996:doCheck,[(303,139)(303,202)])
}
Add(Memory,4130728,392,238)
{
Point(Data)
link(onData,1314269:doValue,[])
link(Data,3018100:MouseX,[])
}
Add(Memory,1314269,434,238)
{
Point(Data)
link(Data,3018100:MouseY,[(440,226)(405,226)])
}
Add(RGN_Rect,2143450,315,119)
{
Point1=6553700
Point2=6553800
Point2AsOffset=0
}
Add(RGN_PointXY,7821996,315,196)
{
link(onTrue,3018100:doPosition,[])
link(onFalse,4130728:doValue,[(363,209)(363,244)])
link(Region,2143450:Result,[])
link(X,9647406:MouseX,[(328,179)(251,179)])
link(Y,9647406:MouseY,[(335,170)(258,170)])
}
Add(MouseEvent,3018100,392,182)
{
Point(doPosition)
link(X,4130728:Value,[(405,171)(373,171)(373,281)(398,281)])
link(Y,1314269:Value,[(412,169)(472,169)(472,281)(440,281)])
}
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 655
Рейтинг: 18
#6: 2015-02-16 15:04:47 ЛС | профиль | цитата
Всем спасибо! Отличные примеры! п.с. плюсану как лимит закончится
карма: 0

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)