Стиль Flash AS3 ComboBox не используется - PullRequest
1 голос
/ 18 января 2012

У меня есть ComboBox (назовите его cb) на сцене в первом кадре.Я хотел бы установить его стиль, чтобы текстовое поле было выровнено вправо.При запуске событие какого-либо другого компонента сначала отключается, а через некоторое время снова включает ComboBox.

Я использую следующий код для установки стиля (в первом кадре):

var menuTextFormat:TextFormat = new TextFormat();
menuTextFormat.align = "right";
cb.textField.setStyle("textFormat", menuTextFormat);
cb.setStyle("textFormat", menuTextFormat);
cb.setStyle("disabledTextFormat", menuTextFormat);
video.addEventListener(VideoEvent.ON_CHANGE, function (event) {cb.enabled = okButton.enabled = false;})
video.addEventListener(VideoEvent.ON_READY, function (event) {cb.enabled = okButton.enabled = true; })

video - это простой компонент, который отправляет событие ON_CHANGE, когда камера инициализируется, и ON_READY, когда камера подключена.После этого кода я даю cb новый DataProvider и присоединяю камеру к видео компоненту, который отправляет событие.

Когда запускается вспышка, стиль не активен, текст выравнивается по левому краю.Когда происходит первое событие, ComboBox отключается.Все еще выровнен.После этого второе событие включает его и примененные стили, оно выравнивается по правому краю.

Я хочу, чтобы оно выравнивалось по правому краю с первого раза.Я попытался отключить / включить компонент из AS, но не сработал, кажется, что нужно немного времени, чтобы применить стиль.

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

Я пытался вручную добавить компонент с addChild из AS, но все равно безуспешно.

Как я могу заставить егоиспользовать стиль?

Спасибо за любую идею!

Среда:

CS5.5
AS3
Flash version: 11.1.102.55
OS: Win XP

Обновление: Я понял, как сделать простую концепцию:

На сцене я бросаю ComboBox (имя экземпляра cb) и символ из библиотеки с именем foobar (имя экземпляра видео).В первом кадре напишите следующий код:

import fl.data.DataProvider;
import flash.events.Event;
import flash.text.TextFormat;
import fl.controls.ComboBox;

var menuTextFormat:TextFormat = new TextFormat();
menuTextFormat.align = "right";
cb.textField.setStyle("textFormat", menuTextFormat);
cb.setStyle("textFormat", menuTextFormat);
cb.setStyle("disabledTextFormat", menuTextFormat);

video.addEventListener(Event.ACTIVATE, function (event) {cb.enabled = false;})
video.addEventListener(Event.COMPLETE, function (event) {cb.enabled = true; })

var arr:Array = new Array();
for (var i=0; i<10 ; i++)
    arr.push({label:"asdfasdf", data:i})
cb.dataProvider = new DataProvider(arr);

video.start()

После этого создайте foobar.as и напишите следующее:

package  {

    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.utils.Timer;


    public class foobar extends MovieClip {     
        private var myTimer:Timer = new Timer(3000);

        public function start() {
            dispatchEvent(new Event(Event.ACTIVATE))
            myTimer.addEventListener("timer", timerHandler);
                        myTimer.start();
        }

        public function timerHandler(evt:Event) {
            myTimer.stop()
            dispatchEvent(new Event(Event.COMPLETE))
        }
    }
}

1 Ответ

0 голосов
/ 20 января 2012

Я думаю, вам нужно применить все эти стили после того, как ComboBox будет «готов» (что может быть не сразу).

обернуть все ваши элементы форматирования текста в функцию и вызвать функцию, когда ComboBoxзапускает событие ADDED_TO_STAGE, и посмотрите, поможет ли это ...

 cb.addEventListener(Event.ADDED_TO_STAGE, applyMyStyle);


    function applyMyStyle(evt:Event){
       //apply style here to evt.target
    }

Не уверен, поможет ли это, но оно того стоит.

...