Страница 1 из 1
Непонятка с Region
Добавлено: 26 Июль 2011, 16:10
kreator
Делаю Region с аттрибутом IMM для отслеживания событий MouseIn и MouseOut. Всё замечательно. Но. Если внутри региона Button, то при наведении на него срабатывает событие MouseOut. Это баг или фича? И как побороть красиво?
Re: Непонятка с Region
Добавлено: 26 Июль 2011, 17:12
Yufil
Поместить регион в списке контролов раньше Button. Правда, тогда Button работать не будет
Re: Непонятка с Region
Добавлено: 27 Июль 2011, 0:41
Admin
kreator писал(а):Делаю Region с аттрибутом IMM для отслеживания событий MouseIn и MouseOut. Всё замечательно. Но. Если внутри региона Button, то при наведении на него срабатывает событие MouseOut. Это баг или фича? И как побороть красиво?
Еще вариант, callback на окно и проверка вхождения в "регион" из него. Регион можно оставить, получить с него координаты в начале и удалить.
Re: Непонятка с Region
Добавлено: 27 Июль 2011, 8:51
Andrew™
Даже если "чиcтый" регион, событие MousOut можно и не поймать если мышу быстро увести, проходил это, тут надо по другому, и это касается любого контрола, через сабклассинг нужно все мышиные события брать на себя и обрабатывать, почитай вот про эти API функции:
Код: Выделить всё
SetCapture(UNSIGNED),UNSIGNED,PASCAL,PROC
ReleaseCapture(),BOOL,PASCAL,PROC
Re: Непонятка с Region
Добавлено: 27 Июль 2011, 12:14
Yufil
Может быть, не стоит изощряться, а просто по таймеру проверять Mousex() и Mousey() и проверять, входят они в нужный контрол или не. Когда-то делал, работало вполне прилично.
Re: Непонятка с Region
Добавлено: 27 Июль 2011, 12:31
kreator
Да, сделал через mousex(), mousey(). Стал заметен эффект быстрого увода мыши. Не айс.
Re: Непонятка с Region
Добавлено: 27 Июль 2011, 12:40
Andrew™
Yufil писал(а):Может быть, не стоит изощряться, а просто по таймеру проверять Mousex() и Mousey() и проверять, входят они в нужный контрол или не. Когда-то делал, работало вполне прилично.
ну не знаю, если выбирать между сабклассингом и таймером, так последнее для меня и есть больший изврат

Re: Непонятка с Region
Добавлено: 27 Июль 2011, 13:07
Yufil
Ну, помещать кнопы в регион - ещё больший изврат... Я делал редактор экранов, там кнопы таскались и ресайзились, но НЕ нажимались.
На крайняк можно при щелчке по региону проверить, не находится ли курсор над кнопой и запостить event ...
Кстати, пытался сделать и сабклассинг - кнопка просто не получала сообщения при нажатии, если была накрыта регионом.
Может быть, стоит область, где нужен MouseIn - MouseOut ограничить несколькими узкими полосками с краёв и фиксировать прохождение курсора над этими полосками. Тоже, правда, не цимес...
Re: Непонятка с Region
Добавлено: 27 Июль 2011, 15:29
kreator
Методом проб получил приемлемый результат. На событие MouseOut вешаю код:
Код: Выделить всё
LOC:MouseX = mousex()
LOC:MouseY = mousey()
if LOC:MouseX>230 and LOC:MouseX<393 and LOC:MouseY>(-51) and LOC:MouseY<(-4)
return Level:Notify
end
?PANEL2{prop:Fill} = 00EEDCCDh
?String1{prop:Color} = 00F1D9C1h
Пока под вопросом абсолютные величины координат региона. Надо попробовать на другом мониторе.
Re: Непонятка с Region
Добавлено: 28 Июль 2011, 11:49
Yufil
А зачем абсолютные ? If Inrange(MouseX(),?Region{Prop:Xpos},?Region{Prop:Xpos}+?Region{Prop:Width})
And Inrange(Mousey(),?Region{Prop:Ypos},?Region{Prop:Ypos}+?Region{Prop:Height})
..................
Re: Непонятка с Region
Добавлено: 28 Июль 2011, 15:01
kreator
Да, всё правильно. Так и сделаю. Спасибо.