Непонятка с Region

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Непонятка с Region

Сообщение kreator »

Делаю Region с аттрибутом IMM для отслеживания событий MouseIn и MouseOut. Всё замечательно. Но. Если внутри региона Button, то при наведении на него срабатывает событие MouseOut. Это баг или фича? И как побороть красиво?
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Непонятка с Region

Сообщение Yufil »

Поместить регион в списке контролов раньше Button. Правда, тогда Button работать не будет
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Непонятка с Region

Сообщение Admin »

kreator писал(а):Делаю Region с аттрибутом IMM для отслеживания событий MouseIn и MouseOut. Всё замечательно. Но. Если внутри региона Button, то при наведении на него срабатывает событие MouseOut. Это баг или фича? И как побороть красиво?
Еще вариант, callback на окно и проверка вхождения в "регион" из него. Регион можно оставить, получить с него координаты в начале и удалить.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Непонятка с Region

Сообщение Andrew™ »

Даже если "чиcтый" регион, событие MousOut можно и не поймать если мышу быстро увести, проходил это, тут надо по другому, и это касается любого контрола, через сабклассинг нужно все мышиные события брать на себя и обрабатывать, почитай вот про эти API функции:

Код: Выделить всё

          SetCapture(UNSIGNED),UNSIGNED,PASCAL,PROC
          ReleaseCapture(),BOOL,PASCAL,PROC
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Непонятка с Region

Сообщение Yufil »

Может быть, не стоит изощряться, а просто по таймеру проверять Mousex() и Mousey() и проверять, входят они в нужный контрол или не. Когда-то делал, работало вполне прилично.
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Непонятка с Region

Сообщение kreator »

Да, сделал через mousex(), mousey(). Стал заметен эффект быстрого увода мыши. Не айс.
We are hard at work… for you. :)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Непонятка с Region

Сообщение Andrew™ »

Yufil писал(а):Может быть, не стоит изощряться, а просто по таймеру проверять Mousex() и Mousey() и проверять, входят они в нужный контрол или не. Когда-то делал, работало вполне прилично.
ну не знаю, если выбирать между сабклассингом и таймером, так последнее для меня и есть больший изврат ;)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Непонятка с Region

Сообщение Yufil »

Ну, помещать кнопы в регион - ещё больший изврат... Я делал редактор экранов, там кнопы таскались и ресайзились, но НЕ нажимались.

На крайняк можно при щелчке по региону проверить, не находится ли курсор над кнопой и запостить event ...

Кстати, пытался сделать и сабклассинг - кнопка просто не получала сообщения при нажатии, если была накрыта регионом.

Может быть, стоит область, где нужен MouseIn - MouseOut ограничить несколькими узкими полосками с краёв и фиксировать прохождение курсора над этими полосками. Тоже, правда, не цимес...
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Непонятка с Region

Сообщение 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
Пока под вопросом абсолютные величины координат региона. Надо попробовать на другом мониторе.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Непонятка с Region

Сообщение 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})
..................
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Непонятка с Region

Сообщение kreator »

Да, всё правильно. Так и сделаю. Спасибо.
We are hard at work… for you. :)
Ответить