Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как отключить tabEnabled сразу для всех MovieClip? (http://www.flasher.ru/forum/showthread.php?t=145938)

джонатан 23.10.2010 23:23

Как отключить tabEnabled сразу для всех MovieClip?
 
Здравствуйте! Подскажите, как на AS3, реплизовать вот такой AS2 код:

Код AS1/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% не уверен, но по-моему вашу задачу решает следующий код, прописанный в корневом классе приложения:

Код AS3:

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

Цитата:

Сообщение от koIIImarik (Сообщение 945171)
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

Код AS3:

                        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

не будет оно применено к суперклассу

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

и в данном случае вам без разницы от какого вы дисплейОбжекта наследуетесь. вопрос в иерархии. факт в том, что если написать
Код AS3:

 super.tabChildren = false;

в рутовом классе, то все это будет применяться ко всем детям и детям детей и....

dimarik 28.10.2010 16:45

Немного опередили )

Цитата:

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

.

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

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

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

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

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

koIIImarik 01.11.2010 01:43

2 etc:
Вы привели участок кода:
Код AS3:

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

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


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

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