Приветствую народ. Есть вопрос. На форуме я нашел кучу примеров по работе с регионами, а точнее не пускать мышь внутрь региона. Уже дней 5 бьюсь над тем как сделать обратное, не выпускать мышь за пределы региона , или окна. Требуется, чтоб мышь работала сугубо в окне и не выходила за пределы его пока программа работает. Если есть наметки буду признателен.
Этот топик читают: Гость
Ответов: 68
Рейтинг: 1
|
|||
карма: 1 |
|
Ответов: 1291
Рейтинг: 47
|
|||
kir1381, точно не локер делаешь?) Опасный функционал. Если только в ЛС.
--- Добавлено в 2020-04-10 14:47:56 Пока держи exe) Редактировалось 1 раз(а), последний 2020-04-10 14:47:56 |
|||
карма: 3 |
| ||
файлы: 1 | Захват мыши окном.zip [36.6KB] [378] |
Ответов: 5227
Рейтинг: 587
|
|||
Ну если принудить для примера пользователя пройти тест систему по определённой последовательности действий вполне реально, для этого есть штатные соответствующие функции Пример:
|
|||
карма: 4 |
|
Ответов: 1291
Рейтинг: 47
|
|||
andrestudio, спасибо, очень интересный функционал. Насколько полезный - другой вопрос) Но у тебя мышь все таки вырывается порой за пределы окна. Если ею поводить в районе кнопок в заголовке. Но плавно и не дергается как моя. Раз уж вирусы не страшны то и я выложу схему.
|
|||
карма: 3 |
|
Ответов: 68
Рейтинг: 1
|
|||
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 |
|
Ответов: 1291
Рейтинг: 47
|
|||
kir1381, таймер решает эту проблему с вырыванием мыши, доработал схему andrestudio. У меня кстати она тоже вырвалась в итоге, если медленно поводить внизу справа у формы.
|
|||
карма: 3 |
|
Ответов: 68
Рейтинг: 1
|
|||
Во!Теперь вроде то , что нужно!Спасибо!
|
|||
карма: 1 |
|
Ответов: 1291
Рейтинг: 47
|
|||
andrestudio спасибо, его пример - шедевр!)
|
|||
карма: 3 |
|
Ответов: 68
Рейтинг: 1
|
|||
Все таки нашел еще один недочет, когда сворачиваешь окно мышь так же остается в пределах размера свернутого окна и не выходит за пределы. Как это исправить? спасибо
|
|||
карма: 1 |
|
Ответов: 1291
Рейтинг: 47
|
|||
kir1381, блин, свернул и с трудом вырвался с помощью диспетчера задач и клавиатуры) Вот тебе и локер)
Короче, добавил отключение всего этого при сворачивании формы и активацию по разворачивании:
|
|||
карма: 3 |
|
10