PDA

Просмотр полной версии : click на MovieClip проблема


YuryS
30.08.2006, 15:17
ПРивет, может кто подскажет как быть вот с чем:

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 и т.п. определенные в главном мувике, перекрывают события дочерних мувиков.