PDA

Просмотр полной версии : Как отключить tabEnabled сразу для всех MovieClip?


джонатан
23.10.2010, 23:23
Здравствуйте! Подскажите, как на AS3, реплизовать вот такой AS2 код:


MovieClip.portotype.tabEnabled = false;


Спасибо.

i.o.
23.10.2010, 23:40
А вы уже пробовали и у вас не получилось?
Кстати правильно будет - prototype.

wvxvw
24.10.2010, 10:35
Так не будет работать, и правильно, потому что свойство это не в прототипе. Не пытайтесь переделать встроенные классы плеера, это как объять необъятное, у вас все равно не получится.

джонатан
24.10.2010, 23:19
Ну я имел ввиду, как сделать подобное, чтобы у всех объектов сразу стал tabEnabled = false

koIIImarik
24.10.2010, 23:43
На 100% не уверен, но по-моему вашу задачу решает следующий код, прописанный в корневом классе приложения:

this.tabEnabled = false;
this.tabChildren = false;

При беглом тесте в моей флешке, вроде, жёлтая рамка при табуляции не появляется.

dimarik
25.10.2010, 01:52
Вопрос был о MovieClip. Как вариант, унаследуйте его и реализуйте необходимую функциональность. Соответственно, в приложении используйте экземпляры кастомного класса.

koIIImarik
25.10.2010, 09:49
2 dimarik:
Специально сейчас попробовал унаследовать главный класс приложения от MovieClip, а не от Sprite, но жёлтые рамки не появляются так же.

dimarik
25.10.2010, 10:28
koIIImarik, в Вашем примере рамок не будет вообще. Вообще. Не будет. Вы ставите запрет на их отображание начиная с root иерархии дисплейлиста приложения. Т.е. у всех наследников InteractiveObject, входящих в дисплейлист не будет ни одной рамки. Неужели этот так трудно понять? Если вопрос ставился именно о наследниках MovieClip, а вопрос именно так и ставился, то вариант через прототипы был бы подходящим, если бы "tabEnabled", как заметил wvxvw было бы прототипным.

джонатан
25.10.2010, 15:02
Всем спасибо.

Psycho Tiger
25.10.2010, 16:31
2 dimarik:
Специально сейчас попробовал унаследовать главный класс приложения от MovieClip, а не от Sprite, но жёлтые рамки не появляются так же.
Главное от InteractiveObject унаследоваться - а Sprite, MovieClip или TextField это дело 10.

джонатан
25.10.2010, 18:12
Дело 10? Это что еще за шифр? :)

Psycho Tiger
25.10.2010, 18:17
Дело десятое.

джонатан
25.10.2010, 19:08
Аааа, чёт не догадался я :)

etc
25.10.2010, 19:24
super.tabEnabled = false;
super.tabChildren = false;
super.focusRect = false;
super.stage.stageFocusRect = false;

В руте.

джонатан
28.10.2010, 16:19
Супер, спасибо, это получается будет применено к суперклассу, т.е. extends MovieClip, а если скажем для текстовых полей? Отдельный класс сделать можно и наследоваться от текстфилда и по такой же схеме?

cleptoman
28.10.2010, 16:33
не будет оно применено к суперклассу

данная запись показывает, что используется метод определенный в суперклассе, а не переопределенный в наследнике (если он был переопределен).

и в данном случае вам без разницы от какого вы дисплейОбжекта наследуетесь. вопрос в иерархии. факт в том, что если написать
super.tabChildren = false;
в рутовом классе, то все это будет применяться ко всем детям и детям детей и....

dimarik
28.10.2010, 16:45
Немного опередили )

Супер, спасибо, это получается будет применено к суперклассу, т.е. extends MovieClip.

Это будет применено ко всем DisplayObject определенной ветки дисплей-листа.

super указывает на то, что будет использовано свойство или метод, объявленные выше в иерархии классов. tabEnabled, focusRect объявлены в InteractiveObject, tabChildren - в DisplayObjectContainer.

Прошу заметить, что иерархия классов и иерархия дисплей-листа - это разные понятия.

"В руте" - означало объект документ-класса приложения. Это Самый Верхний уровень в дереве дисплейлиста приложения. Выше только Stage (если приложение запускается из этого же swf) или Ветка Родителя (инстанс Loader'а, которым загрузили swf).

tabChildren запрещает перемещение фокуса табуляцией по... детям. Запретив перечислять в Самом Главном Родителе, автоматом добиваемся запрета во всех остальных его ветках и листьях. Осталось запретить самого Родителя, поставив ему tabEnabled = false.

koIIImarik
01.11.2010, 01:43
2 etc:
Вы привели участок кода:
super.stage.stageFocusRect = false;

Я попробовал в своей тестовой флешке написать это и удалить tabEnabled/tabChildren, результатом оказалось то, что рамка табуляции так же пропала. Подскажите, для чего нужно прописывать tabEnabled/tabChildren если и stageFocusRect достаточно, чтобы убрать рамку выделения?

etc
01.11.2010, 11:53
koIIImarik, ну фокус же все равно будет переходить по мувикам. Чтобы этого не происходило, отключаем ещё и tabChildren.

koIIImarik
01.11.2010, 22:05
Так и думал, спасибо за ответ =)

Дурачёк
17.06.2011, 00:40
спасибо! код помог!
но пришлось сократить своё флешку до одного кадра с двух и убрать "стоп" так как она дико лажала с моими кнопочками и крутящимся курсором... (прелоадер всё ровно не стал ставить... не большая получилась)