Вверх ↑
Этот топик читают: Гость
Ответов: 68
Рейтинг: 1
#1: 2020-04-10 05:01:29 ЛС | профиль | цитата
Приветствую народ. Есть вопрос. На форуме я нашел кучу примеров по работе с регионами, а точнее не пускать мышь внутрь региона. Уже дней 5 бьюсь над тем как сделать обратное, не выпускать мышь за пределы региона , или окна. Требуется, чтоб мышь работала сугубо в окне и не выходила за пределы его пока программа работает. Если есть наметки буду признателен.
карма: 1

0
Ответов: 1291
Рейтинг: 47
#2: 2020-04-10 14:41:17 ЛС | профиль | цитата
kir1381, точно не локер делаешь?) Опасный функционал. Если только в ЛС.

--- Добавлено в 2020-04-10 14:47:56

Пока держи exe)

Редактировалось 1 раз(а), последний 2020-04-10 14:47:56
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
файлы: 1Захват мыши окном.zip [36.6KB] [378]
Ответов: 5227
Рейтинг: 587
#3: 2020-04-11 08:09:35 ЛС | профиль | цитата
Ну если принудить для примера пользователя пройти тест систему по определённой последовательности действий вполне реально, для этого есть штатные соответствующие функции Пример:

Add(RadioButton,10766049,112,63)
{
Left=150
Top=95
Caption="Form"
link(onSelect,8124996:doWork1,[])
}
Add(MainForm,2953706,217,63)
{
BorderStyle=1
Position=1
Point(Handle)
Point(onKeyDown)
link(onKeyDown,7091429:doCompare,[(257,90)(257,69)])
}
Add(InlineCode,14562614,217,203)
{
WorkPoints=#14:doSetMouseRect|16:doResetMouseRect|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|30:uses kol,windows, Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|18: h: THI_Event;|56: procedure doSetMouseRect(var dt: TData; idx: word);|58: procedure doResetMouseRect(var dt: TData; idx: word);|0:|5: end;|0:|14:implementation|0:|37:procedure THiAsmClass.doSetMouseRect;|3:var|11: R: TRect;|5:begin|38: GetWindowRect(ToIntegerEvent(h),R);|18: ClipCursor(@R);|4:end;|0:|39:procedure THiAsmClass.doResetMouseRect;|5:begin|19: ClipCursor(nil);|4:end;|0:|4:end.|
link(h,9708078:Var,[])
}
Add(Edit,16652307,371,63)
{
Left=160
Top=50
Width=195
Point(Handle)
}
Add(Edit,11265787,322,63)
{
Left=160
Top=20
Width=195
Point(Handle)
}
Add(Memo,9061837,420,63)
{
Left=20
Top=80
Width=115
Height=165
Point(Handle)
Point(onMouseDown)
}
Add(GetIndexData,9708078,217,140)
{
Count=4
link(onIndex,14562614:doSetMouseRect,[(263,146)(263,189)(205,189)(205,209)])
link(Data1,2953706:Handle,[])
link(Data2,11265787:Handle,[(230,112)(335,112)])
link(Data3,16652307:Handle,[(237,118)(384,118)])
link(Data4,9061837:Handle,[(244,124)(447,124)])
}
Add(Button,5359350,112,210)
{
Left=15
Top=20
Width=125
Caption="Reset mouse"
link(onClick,14115041:doWork2,[])
}
Add(RadioButton,9727169,112,70)
{
Left=150
Top=125
Width=60
Caption="Edit1"
link(onSelect,8124996:doWork2,[])
}
Add(ChanelToIndex,8124996,161,63)
{
Count=4
link(onIndex,9708078:doIndex,[(205,69)(205,146)])
}
Add(RadioButton,16330823,112,77)
{
Left=150
Top=150
Width=60
Caption="Edit2"
link(onSelect,8124996:doWork3,[])
}
Add(RadioButton,14961306,112,84)
{
Left=150
Top=175
Width=70
Caption="Memo"
link(onSelect,8124996:doWork4,[])
}
Add(Label,4987787,112,161)
{
Left=150
Top=225
Width=220
Height=20
Font=[MS Sans Serif,8,1,255,1]
Caption="Key "Esc" reset mouse position"
}
Add(If_else,7091429,266,63)
{
Op2=Integer(27)
link(onTrue,14115041:doWork1,[(315,69)(315,249)(186,249)])
}
Add(HubEx,14115041,182,210)
{
link(onEvent,14562614:doResetMouseRect,[])
}
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 1291
Рейтинг: 47
#4: 2020-04-11 14:21:27 ЛС | профиль | цитата
andrestudio, спасибо, очень интересный функционал. Насколько полезный - другой вопрос) Но у тебя мышь все таки вырывается порой за пределы окна. Если ею поводить в районе кнопок в заголовке. Но плавно и не дергается как моя. Раз уж вирусы не страшны то и я выложу схему.


Add(MainForm,2953706,21,112)
{
DragForm=0
MouseCapture=0
Point(onMouseEnter)
Point(onMouseLeave)
Point(MouseX)
Point(MouseY)
Point(onKeyDown)
link(onMouseEnter,15679229:doTimer,[(65,139)(65,209)])
link(onMouseLeave,14348073:doEvent1,[])
link(onKeyDown,9063745:doReadKey,[(75,153)(75,300)])
}
Add(MouseEvent,5257017,154,126)
{
Point(doPosition)
link(X,11528909:Value,[(167,114)(153,114)(153,247)(139,247)])
link(Y,5545977:Value,[(174,114)(181,114)(181,247)(188,247)])
}
Add(Memory,11528909,133,203)
{
Point(Data)
link(onData,5545977:doValue,[])
link(Data,5257017:MouseX,[(139,181)(160,181)])
}
Add(Memory,5545977,182,203)
{
Point(Data)
link(Data,5257017:MouseY,[(188,181)(167,181)])
}
Add(Timer,15679229,77,203)
{
Interval=100
Enable=1
link(onTimer,11528909:doValue,[])
}
Add(Hub,14348073,77,140)
{
link(onEvent1,5257017:doPosition,[])
link(onEvent2,15679229:doStop,[(103,153)(103,185)(65,185)(65,216)])
}
Add(Keyboard,9063745,98,294)
{
Key=27
link(onReadKey,11564416:doEvent,[])
}
Add(IndexToChanel,11564416,140,294)
{
link(onEvent2,2953706:doClose,[(184,307)(184,223)(9,223)(9,139)])
}
Add(Label,8126663,119,91)
{
Left=125
Top=90
Width=65
Height=17
Caption="ESC - выход"
}

карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 68
Рейтинг: 1
#5: 2020-04-12 11:12:49 ЛС | профиль | цитата
andrestudio писал(а):

Add(MainForm,2953706,21,112)
{
DragForm=0
MouseCapture=0
Point(onMouseEnter)
Point(onMouseLeave)
Point(MouseX)
Point(MouseY)
Point(onKeyDown)
link(onMouseEnter,15679229:doTimer,[(65,139)(65,209)])
link(onMouseLeave,14348073:doEvent1,[])
link(onKeyDown,9063745:doReadKey,[(75,153)(75,300)])
}
Add(MouseEvent,5257017,154,126)
{
Point(doPosition)
link(X,11528909:Value,[(167,114)(153,114)(153,247)(139,247)])
link(Y,5545977:Value,[(174,114)(181,114)(181,247)(188,247)])
}
Add(Memory,11528909,133,203)
{
Point(Data)
link(onData,5545977:doValue,[])
link(Data,5257017:MouseX,[(139,181)(160,181)])
}
Add(Memory,5545977,182,203)
{
Point(Data)
link(Data,5257017:MouseY,[(188,181)(167,181)])
}
Add(Timer,15679229,77,203)
{
Interval=100
Enable=1
link(onTimer,11528909:doValue,[])
}
Add(Hub,14348073,77,140)
{
link(onEvent1,5257017:doPosition,[])
link(onEvent2,15679229:doStop,[(103,153)(103,185)(65,185)(65,216)])
}
Add(Keyboard,9063745,98,294)
{
Key=27
link(onReadKey,11564416:doEvent,[])
}
Add(IndexToChanel,11564416,140,294)
{
link(onEvent2,2953706:doClose,[(184,307)(184,223)(9,223)(9,139)])
}
Add(Label,8126663,119,91)
{
Left=125
Top=90
Width=65
Height=17
Caption="ESC - выход"
}


Очень интересное решение. Спасибо. Но есть одно но. Если форму сдвинуть за заголовок. то мышь сразу вырывается. Как исправить?

Код, который любезно предоставил Aziz, не имеет вроде такого огреха, но он исполнение менее плавное.

Спасибо вам ребята за помощь.
карма: 1

0
Ответов: 1291
Рейтинг: 47
#6: 2020-04-12 15:13:44 ЛС | профиль | цитата
kir1381, таймер решает эту проблему с вырыванием мыши, доработал схему andrestudio. У меня кстати она тоже вырвалась в итоге, если медленно поводить внизу справа у формы.


Add(RadioButton,10766049,546,49)
{
Left=150
Top=95
Caption="Form"
link(onSelect,8124996:doWork1,[])
}
Add(MainForm,14569843,749,56)
{
BorderStyle=1
Position=1
Point(Handle)
Point(onKeyDown)
link(onKeyDown,7091429:doCompare,[(789,83)(789,62)])
}
Add(InlineCode,14562614,749,196)
{
WorkPoints=#14:doSetMouseRect|16:doResetMouseRect|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|30:uses kol,windows, Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|18: h: THI_Event;|56: procedure doSetMouseRect(var dt: TData; idx: word);|58: procedure doResetMouseRect(var dt: TData; idx: word);|0:|5: end;|0:|14:implementation|0:|37:procedure THiAsmClass.doSetMouseRect;|3:var|11: R: TRect;|5:begin|38: GetWindowRect(ToIntegerEvent(h),R);|18: ClipCursor(@R);|4:end;|0:|39:procedure THiAsmClass.doResetMouseRect;|5:begin|19: ClipCursor(nil);|4:end;|0:|4:end.|
link(h,9708078:Var,[])
}
Add(Edit,16652307,903,56)
{
Left=160
Top=50
Width=195
Point(Handle)
}
Add(Edit,11265787,854,56)
{
Left=160
Top=20
Width=195
Point(Handle)
}
Add(Memo,9061837,952,56)
{
Left=20
Top=80
Width=115
Height=165
Point(Handle)
Point(onMouseDown)
}
Add(GetIndexData,9708078,749,133)
{
Count=4
link(onIndex,14562614:doSetMouseRect,[(795,139)(795,182)(737,182)(737,202)])
link(Data1,14569843:Handle,[])
link(Data2,11265787:Handle,[(762,105)(867,105)])
link(Data3,16652307:Handle,[(769,111)(916,111)])
link(Data4,9061837:Handle,[(776,117)(979,117)])
}
Add(Button,5359350,644,203)
{
Left=15
Top=20
Width=125
Caption="Reset mouse"
link(onClick,14115041:doWork2,[])
}
Add(RadioButton,9727169,546,56)
{
Left=150
Top=125
Width=60
Caption="Edit1"
link(onSelect,8124996:doWork2,[])
}
Add(ChanelToIndex,8124996,595,49)
{
Count=4
link(onIndex,10922876:doValue,[])
}
Add(RadioButton,16330823,546,63)
{
Left=150
Top=150
Width=60
Caption="Edit2"
link(onSelect,8124996:doWork3,[])
}
Add(RadioButton,14961306,546,70)
{
Left=150
Top=175
Width=70
Caption="Memo"
link(onSelect,8124996:doWork4,[])
}
Add(Label,4987787,644,154)
{
Left=150
Top=225
Width=220
Height=20
Font=[MS Sans Serif,8,1,255,1]
Caption="Key "Esc" reset mouse position"
}
Add(If_else,7091429,798,56)
{
Op2=Integer(27)
link(onTrue,6160569:doEvent1,[(838,62)(838,146)])
}
Add(HubEx,14115041,714,203)
{
link(onEvent,14562614:doResetMouseRect,[])
}
Add(Memory,10922876,672,49)
{
link(onData,12890139:doTimer,[(716,55)(716,93)(555,93)(555,132)])
}
Add(DoData,12399174,672,105)
{
link(onEventData,9708078:doIndex,[(726,111)(726,139)])
link(Data,10922876:Value,[])
}
Add(Timer,12890139,567,126)
{
Interval=100
link(onTimer,12399174:doData,[(635,132)(635,111)])
}
Add(Hub,6160569,847,140)
{
link(onEvent1,14115041:doWork1,[(873,146)(873,176)(718,176)])
link(onEvent2,12890139:doStop,[(873,153)(873,146)(555,146)(555,139)])
}

карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 68
Рейтинг: 1
#7: 2020-04-12 16:13:31 ЛС | профиль | цитата
Во!Теперь вроде то , что нужно!Спасибо!
карма: 1

0
Ответов: 1291
Рейтинг: 47
#8: 2020-04-12 17:08:15 ЛС | профиль | цитата
andrestudio спасибо, его пример - шедевр!)
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 68
Рейтинг: 1
#9: 2020-04-12 18:34:16 ЛС | профиль | цитата
Все таки нашел еще один недочет, когда сворачиваешь окно мышь так же остается в пределах размера свернутого окна и не выходит за пределы. Как это исправить? спасибо
карма: 1

0
Ответов: 1291
Рейтинг: 47
#10: 2020-04-15 12:03:22 ЛС | профиль | цитата
kir1381, блин, свернул и с трудом вырвался с помощью диспетчера задач и клавиатуры) Вот тебе и локер)
Короче, добавил отключение всего этого при сворачивании формы и активацию по разворачивании:


Add(RadioButton,10766049,546,49)
{
Left=150
Top=95
Caption="Form"
link(onSelect,8124996:doWork1,[])
}
Add(MainForm,14569843,749,56)
{
BorderStyle=1
Position=1
Point(Handle)
Point(onKeyDown)
Point(onHide)
Point(onShow)
link(onKeyDown,7091429:doCompare,[(789,83)(789,62)])
link(onHide,3752967:doEvent1,[(797,90)(797,125)])
link(onShow,7943524:doWork3,[(793,97)(793,69)])
}
Add(InlineCode,14562614,749,196)
{
WorkPoints=#14:doSetMouseRect|16:doResetMouseRect|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|30:uses kol,windows, Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|18: h: THI_Event;|56: procedure doSetMouseRect(var dt: TData; idx: word);|58: procedure doResetMouseRect(var dt: TData; idx: word);|0:|5: end;|0:|14:implementation|0:|37:procedure THiAsmClass.doSetMouseRect;|3:var|11: R: TRect;|5:begin|38: GetWindowRect(ToIntegerEvent(h),R);|18: ClipCursor(@R);|4:end;|0:|39:procedure THiAsmClass.doResetMouseRect;|5:begin|19: ClipCursor(nil);|4:end;|0:|4:end.|
link(h,9708078:Var,[])
}
Add(Edit,16652307,903,56)
{
Left=160
Top=50
Width=195
Point(Handle)
}
Add(Edit,11265787,854,56)
{
Left=160
Top=20
Width=195
Point(Handle)
}
Add(Memo,9061837,952,56)
{
Left=20
Top=80
Width=115
Height=165
Point(Handle)
Point(onMouseDown)
}
Add(GetIndexData,9708078,749,133)
{
Count=4
link(onIndex,14562614:doSetMouseRect,[(795,139)(795,182)(737,182)(737,202)])
link(Data1,14569843:Handle,[])
link(Data2,11265787:Handle,[(762,105)(867,105)])
link(Data3,16652307:Handle,[(769,111)(916,111)])
link(Data4,9061837:Handle,[(776,117)(979,117)])
}
Add(Button,5359350,644,203)
{
Left=15
Top=20
Width=125
Caption="Reset mouse"
link(onClick,610605:doWork2,[])
}
Add(RadioButton,9727169,546,56)
{
Left=150
Top=125
Width=60
Caption="Edit1"
link(onSelect,8124996:doWork2,[])
}
Add(ChanelToIndex,8124996,595,49)
{
Count=4
link(onIndex,10922876:doValue,[])
}
Add(RadioButton,16330823,546,63)
{
Left=150
Top=150
Width=60
Caption="Edit2"
link(onSelect,8124996:doWork3,[])
}
Add(RadioButton,14961306,546,70)
{
Left=150
Top=175
Width=70
Caption="Memo"
link(onSelect,8124996:doWork4,[])
}
Add(Label,4987787,644,154)
{
Left=150
Top=225
Width=220
Height=20
Font=[MS Sans Serif,8,1,255,1]
Caption="Key "Esc" reset mouse position"
}
Add(If_else,7091429,798,56)
{
Op2=Integer(27)
link(onTrue,6160569:doEvent1,[(838,62)(838,146)])
}
Add(HubEx,14115041,714,203)
{
link(onEvent,14562614:doResetMouseRect,[])
}
Add(Memory,10922876,672,49)
{
link(onData,7943524:doWork1,[(716,55)])
}
Add(DoData,12399174,672,105)
{
link(onEventData,9708078:doIndex,[(726,111)(726,139)])
link(Data,10922876:Value,[])
}
Add(Timer,12890139,567,126)
{
Interval=100
link(onTimer,12399174:doData,[(635,132)(635,111)])
}
Add(Hub,6160569,847,140)
{
link(onEvent1,14115041:doWork1,[(873,146)(873,176)(718,176)])
link(onEvent2,5661531:doWork2,[(873,153)(873,146)])
}
Add(HubEx,610605,693,203)
{
link(onEvent,14115041:doWork2,[])
}
Add(Hub,3752967,805,119)
{
link(onEvent1,5661531:doWork1,[(823,125)])
link(onEvent2,610605:doWork1,[(838,132)(838,169)(697,169)])
}
Add(HubEx,5661531,819,140)
{
Angle=2
link(onEvent,12890139:doStop,[(555,146)(555,139)])
}
Add(HubEx,7943524,712,63)
{
Angle=1
link(onEvent,12890139:doTimer,[(716,93)(555,93)(555,132)])
}

карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)