Непонятка с Region
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Непонятка с Region
Делаю Region с аттрибутом IMM для отслеживания событий MouseIn и MouseOut. Всё замечательно. Но. Если внутри региона Button, то при наведении на него срабатывает событие MouseOut. Это баг или фича? И как побороть красиво?
We are hard at work… for you. 

Re: Непонятка с Region
Поместить регион в списке контролов раньше Button. Правда, тогда Button работать не будет
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Непонятка с Region
Еще вариант, callback на окно и проверка вхождения в "регион" из него. Регион можно оставить, получить с него координаты в начале и удалить.kreator писал(а):Делаю Region с аттрибутом IMM для отслеживания событий MouseIn и MouseOut. Всё замечательно. Но. Если внутри региона Button, то при наведении на него срабатывает событие MouseOut. Это баг или фича? И как побороть красиво?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: Непонятка с Region
Даже если "чиcтый" регион, событие MousOut можно и не поймать если мышу быстро увести, проходил это, тут надо по другому, и это касается любого контрола, через сабклассинг нужно все мышиные события брать на себя и обрабатывать, почитай вот про эти API функции:
Код: Выделить всё
SetCapture(UNSIGNED),UNSIGNED,PASCAL,PROC
ReleaseCapture(),BOOL,PASCAL,PROC
Re: Непонятка с Region
Может быть, не стоит изощряться, а просто по таймеру проверять Mousex() и Mousey() и проверять, входят они в нужный контрол или не. Когда-то делал, работало вполне прилично.
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Непонятка с Region
Да, сделал через mousex(), mousey(). Стал заметен эффект быстрого увода мыши. Не айс.
We are hard at work… for you. 

Re: Непонятка с Region
ну не знаю, если выбирать между сабклассингом и таймером, так последнее для меня и есть больший извратYufil писал(а):Может быть, не стоит изощряться, а просто по таймеру проверять Mousex() и Mousey() и проверять, входят они в нужный контрол или не. Когда-то делал, работало вполне прилично.

Re: Непонятка с Region
Ну, помещать кнопы в регион - ещё больший изврат... Я делал редактор экранов, там кнопы таскались и ресайзились, но НЕ нажимались.
На крайняк можно при щелчке по региону проверить, не находится ли курсор над кнопой и запостить event ...
Кстати, пытался сделать и сабклассинг - кнопка просто не получала сообщения при нажатии, если была накрыта регионом.
Может быть, стоит область, где нужен MouseIn - MouseOut ограничить несколькими узкими полосками с краёв и фиксировать прохождение курсора над этими полосками. Тоже, правда, не цимес...
На крайняк можно при щелчке по региону проверить, не находится ли курсор над кнопой и запостить event ...
Кстати, пытался сделать и сабклассинг - кнопка просто не получала сообщения при нажатии, если была накрыта регионом.
Может быть, стоит область, где нужен MouseIn - MouseOut ограничить несколькими узкими полосками с краёв и фиксировать прохождение курсора над этими полосками. Тоже, правда, не цимес...
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Непонятка с Region
Методом проб получил приемлемый результат. На событие 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
We are hard at work… for you. 

Re: Непонятка с Region
А зачем абсолютные ? If Inrange(MouseX(),?Region{Prop:Xpos},?Region{Prop:Xpos}+?Region{Prop:Width})
And Inrange(Mousey(),?Region{Prop:Ypos},?Region{Prop:Ypos}+?Region{Prop:Height})
..................
And Inrange(Mousey(),?Region{Prop:Ypos},?Region{Prop:Ypos}+?Region{Prop:Height})
..................