Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   click на MovieClip проблема (http://www.flasher.ru/forum/showthread.php?t=84384)

YuryS 30.08.2006 15:17

click на MovieClip проблема
 
ПРивет, может кто подскажет как быть вот с чем:

1. Имеется MovieClip - прямоугольник (box).
2. На нём располагаются несколько его чаялдов - текстовые поля, или иконки.

Нужно :
Отследить клик на самом box ( перейти по ссылке ).
При этом клик на текстовом поле должен обрабатываться самим текстовым полем, и клик на нём не должен считаться кликом на box.
Курсор при MouseMove должен соостветственно меняться при прохождении текстовых полей на I. Нужно иметь возможность селектировать текст в текстовых полях.

Что не получается.

Если я определяю в классе box ( наследник от UIComponent ) какую либо из функций типа onPress, onRelease, итд. то движение курсора сразу перестаёт обрабатываться текстовыми полями и я вижу handCursor при наведении на них. Никаких селектирований уже не получается. Почему так?:rolleyes:

Если я переопределяю onMouseMove onMouseUp в классе box, и сам считаю, внутри бокса курсор или нет, то всё нормально до определённого момента - текстовые поля получают фокус, можно селектировать и прочее. Но!

Я не могу изнутри box отследить перекрывается ли мой Box сверху каким то другим контролем или нет. Например:

1. Box расположился под scrollbar. При этом выходит, что клик на скролере ведёт к клику на box - переход по ссылке.
2. То же когда box расположился под управляющей кнопкой верхнего уровня. Тыкаем на кнопку ( в ней должен бы срабатывать onClick event ) но до него дело не доходит... бокс получает onMouseUp. вычисляет, что курсор на нём, и командует переход.

Есть у кого ответы?
Не понимаю почему переопределение onPress ведёт к потере способности чаялдов получать фокус...
Не очень я пока в ActionScript...:rolleyes:

Sneg 30.08.2006 16:10

Что мешает создать класс BigBox, в нем есть экземпляр Box (box_instance) - и обработчик событий
Код:

onBoxPress(box_instance:Box):Void;
А самому box_instance добавляешь слушателя
Код:

box_instance.addListener(bigBox_instance):Void;
В Box определяешь событие onPress() на рассылку всем слушателям (если с ним что-то из вне делать)
Код:

onBoxPress(this)
А в сам класс BigBox можешь положить что угодно, текстовые поля и т.п.

YuryS 30.08.2006 18:13

Да в общем то ничего не помешало...опыта тут маловато. Спасибо! так работает. С небольшими изменениями.

Вопросы:
1.addListener - не удалось использовать. Он как бы не метод UIComponent. ( Или я то то не так сделал ?)
2. Не очень понял как определить onPress с именем onBoxPress(this)...

3. Общий вопрос... а почему так получается, что определение OnPress метода ( ну или другого ) ведёт к изменению поведения - трансляция событий мыши в чаялды.
А сам принцип подложки сработал. Пасиба огромное!

Sneg 30.08.2006 19:09

На здоровье :)
1. addListener(eventListener:IBoxEventListener) - это вариант реализации твоей событийной модели (какая она у тебя я не знаю) я написал, как примерно это может выглядеть. Т.е. к примеру у тебя BigBox слушатель события onBoxPress (реализует интерфейс IBoxEventListener в котором описан метод onBoxPress ), а Box у тебя диспетчер - ты подписываешь BigBox на получение сообщений от Box. Когда происходит событие onPress() у Box - срабатывает событие onBoxPress(box:Box) у BigBox. Таким образом BigBox знает о том что нажали Box и знает на какой именно т.к. Box передает в качестве параметра себя.
3. событие onPress,onRollOver и т.п. определенные в главном мувике, перекрывают события дочерних мувиков.


Часовой пояс GMT +4, время: 15:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.