Конечно, хорошо, что любой пользователь Flash может перетащить компонент на рабочее поле из панели компонентов и настроить его параметры. А что, если вы хотите присоединить (attach) один из компонентов к рабочему полю с помощью ActionScript во время проигрывания клипа и при этом пользоваться им так же, как если бы он был просто перетянут на рабочую поверхность вручную?
Давайте в качестве примера возьмем компонент Flash MX Scrollbar Component. Мы хотим иметь возможность присоединять к рабочей поверхности любое количество скроллбаров всякий раз, когда нам это понадобится, используя ActionScript.
Итак, откройте Flash MX и создайте новый клип.
Откройте панель компонентов и убедитесь, что набор "Flash UI Component Set" открыт, а если это не так, выберите его из списка в правом верхнем углу панели.
Перетащите экземпляр компонента "ScrollBar" на рабочее поле. Это разместит в библиотеке вашего клипа все символы, необходимые для функционирования этого компонента.
Сейчас мы переместимся в библиотеку вашего клипа; выберите в библиотеке главный символ для вашего компонента, в данном случае — символ компонента с именем "ScrollBar", находящийся в папке "Flash UI Components". Кликните правой кнопкой мыши на выбранном символе и выберите в появившемся меню пункт "Component Definition". В открывшейся панели в поле "Parameters" вы увидите список всех параметров, используемых выбранным в библиотеке компонентом, в нашем примере вы увидите, что компоненту "ScrollBar" для правильной работы необходимы два параметра:
"Target Textfield" — целевое текстовое поле
"Horizontal" — указание, будет полоса прокрутки горизонтальной или вертикальной.
Теперь, зная, что компонент "ScrollBar" нуждается для правильного функционирования в параметрах, перечисленных в панели "Component Definition", мы можем сделать кое-что сами.
Параметры обладают свойствами "Name" (Имя) и "Variable" (Переменная) , "Name" — это в основном текст, описывающий значение, например, "Target TextField" говорит пользователю, что будет введено имя текстового поля. "Variable" — это имя переменной ActionScript, которая, когда клип начнет проигрываться, будет размещена внутри символа компонента со значением, вводимым пользователем через панель "Component Parameters" или через "Properties Inspector".
"Variable" — это то, что нам понадобится для правильного функционирования наших компонентов.
Как я прежде сказал, есть два параметра, необходимых для правильного функционирования компонента "ScrollBar". Поскольку у нас не будет возможности ввести значения этих двух параметров, когда мы присоединяем символ компонента из библиотеки на рабочее поле с помощью ActionScript, нам нужно знать имена переменных для каждого из этих параметров. Беглый взгляд на панель "Component Definition" говорит нам, что это переменные _targetInstanceName и horizontal.
Теперь нам нужно узнать тип этих параметров, мы же не хотим передавать строку в качестве параметра там, где ожидается число. Чтобы определить тип, посмотрите на атрибут "Type" каждого параметра. В нашем случае Target Textfield — это строка (string), а параметр Horizonal — булева величина, с возможными значениями true/false.
Теперь у нас есть вся необходимая информация для динамического присоединения компонента на рабочее поле с помощью ActionScript, осталась только еще одна вещь, которую нам нужно знать — это Идентификатор Связывания — "Linkage Identifier" для символа компонента. Чтобы найти его, снова выберите символ компонента в библиотеке и, кликнув на нем правой кнопкой мыши, выберите пункт "Linkage" в выпадающем меню. В поле "Identifier" вы увидите строку, которая скоро нам понадобится, в нашем случае значение должно быть "FScrollBarSymbol", такое значение "Linkage Identifier" базируется на стандартах, которые проповедует Macromedia.
Перейдем к последнему этапу. Чтобы присоединить компонент к рабочему полю с помощью AS, нам нужен экземпляр компонента в вашей библиотеке вместе со всеми связанными файлами, также вы должны знать значение "Linkage Identifier" для символа компонента и имена необходимых компоненту "Variable" для параметров.
Для присоединения компонента к рабочему полю будем использовать метод Movieclip.attachMovie; этот метод имеет три необходимых и один опциональный аргумент. Это "Linkage Identifier" для символа компонента, имя экземпляра, которое будет связано с экземпляром символа и глубина размещения нового мувиклипа. В Flash MX вы можете передать также четвертый, опциональный параметр, являющийся объектом со свойствами, которые вы хотите скопировать в новый объект Movieclip, когда он будет создан.
Как вы должны теперь знать, все компоненты запрашивают определенные параметры для правильного функционирования, эти параметры должны быть определены внутри символа компонента перед выполнением Конструктора (Constructor) класса компонента, и мы будем использовать четвертый аргумент метода Movieclip.attachMovie для инициализации экземпляра нашего компонента с помощью переменных, необходимых для правильной работы.
Итак, сначала нам нужно создать наш инициализирующий объект (initialization object) с помощью ActionScript; в этом примере инициализирующий объект будет содержать два параметра для функционирования компонента "ScrollBar", _targetInstanceName и horizontal. Как мы обнаружили ранее, _targetInstanceName должен быть строкой, а horizontal — булевой величиной:
initialization={_targetInstanceName:"myTextField",horizontal:false};
Теперь все, что вы должны сделать, это присоединить символ компонента с помощью ActionScript:
_root.attachMovie("FScrollBarSymbol","myScrollbar",2,initialization);
Как вы можете знать, компонент "ScrollBar" бесполезен без текстового поля, с которым он может быть связан, так что используем следующий код, чтобы создать стандартное текстовое поле для нашего примера:
_root.createTextField("myTextField",1,0,0,100,200); myTextField.wordwrap=true;
И используем такой код для добавления некоторого количества текста к этому текстовому полю:
for(i=1;i<=50;++i){ myTextField.text+=i+". Woweb.ru - портал для вебмастера, "; }
Понимание вышеприведенного кода — это целая отдельная статья.
Итак, теперь наш код должен выглядеть следующим образом:
_root.createTextField("myTextField",1,0,0,100,200); myTextField.wordWrap=true; for(i=1;i<=50;++i){ myTextField.text+=i+". Такой-то текст, "; } initialization={_targetInstanceName:"myTextField",horizontal:false}; _root.attachMovie("FScrollBarSymbol","myScrollbar",2,initialization);
Мы поместили код создания текстового поля перед кодом для присоединения символа "ScrollBar", потому что "ScrollBar" нуждается в уже существующем текстовом поле в момент инициализации.
Давайте только добавим еще одну строку кода для того, чтобы навести немного визуального порядка:
myScrollBar._x=myTextField._width;
Это просто передвигает скроллбар к правой стороне текстового поля.
Чисто из визуальных соображений вы можете захотеть сделать скроллбар той же высоты, что и текстовое поле, это автоматически происходит в среде разработки, но вы должны сделать это вручную с помощью ActionScript, когда вы присоединяете component из библиотеки. Класс FScrollBar предоставляет метод setSize, который изменяет высоту скроллбара, избегая изменения пропорций любой графики, содержащейся внутри него:
myScrollBar.setSize(myTextField._height);
Окончательный код:
_root.createTextField("myTextField",1,0,0,100,200); myTextField.wordWrap=true; for(i=1;i<=50;++i){ myTextField.text+=i+". Такой-то текст, "; } initialization={_targetInstanceName:"myTextField",horizontal:false}; _root.attachMovie("FScrollBarSymbol","myScrollbar",2,initialization); myScrollBar._x=myTextField._width; myScrollBar.setSize(myTextField._height);
Когда вы протестируете ваш клип, то увидите полноценно функционирующее текстовое поле с прокруткой, созданное только методами ActionScript. Процесс, описанный в этой статье, применим ко всем компонентам, так что знать его весьма полезно. |