Обработка событий в FTE

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

Прослушиватели событий для экземпляра TextLine добавляются так же, как и для других объектов отображения. Например, можно определить, когда пользователь наводит мышь на текстовую строку или щелкает мышью на строке. В следующем примере отслеживаются оба эти события. При наведении мыши на строку курсор меняется на курсор «кнопка», а при щелчке на строке курсор меняет цвет.
package 
{ 
    import flash.text.engine.*; 
    import flash.ui.Mouse; 
    import flash.display.Sprite 
    import flash.events.MouseEvent; 
    import flash.events.EventDispatcher; 
     
    public class EventHandlerExample extends Sprite 
    { 
        var textBlock:TextBlock = new TextBlock(); 
 
        public function EventHandlerExample():void 
        { 
            var str:String = "I'll change color if you click me."; 
            var fontDescription:FontDescription = new FontDescription("Arial"); 
            var format:ElementFormat = new ElementFormat(fontDescription, 18); 
            var textElement = new TextElement(str, format); 
            textBlock.content = textElement; 
            createLine(textBlock); 
        } 
     
        private function createLine(textBlock:TextBlock):void 
        { 
            var textLine:TextLine = textBlock.createTextLine(null, 500); 
            textLine.x = 30; 
            textLine.y = 30; 
            addChild(textLine); 
            textLine.addEventListener("mouseOut", mouseOutHandler); 
            textLine.addEventListener("mouseOver", mouseOverHandler); 
            textLine.addEventListener("click", clickHandler); 
        } 
 
        private function mouseOverHandler(event:MouseEvent):void 
        { 
            Mouse.cursor = "button"; 
        } 
 
        private function mouseOutHandler(event:MouseEvent):void 
        { 
            Mouse.cursor = "arrow"; 
        } 
 
        function clickHandler(event:MouseEvent):void { 
            if(textBlock.firstLine) 
                removeChild(textBlock.firstLine); 
            var newFormat:ElementFormat = textBlock.content.elementFormat.clone(); 
            switch(newFormat.color) 
            { 
                case 0x000000: 
                    newFormat.color = 0xFF0000; 
                    break; 
                case 0xFF0000: 
                    newFormat.color = 0x00FF00; 
                    break; 
                case 0x00FF00: 
                    newFormat.color = 0x0000FF; 
                    break; 
                case 0x0000FF: 
                    newFormat.color = 0x000000; 
                    break; 
            } 
            textBlock.content.elementFormat = newFormat; 
            createLine(textBlock); 
        } 
    } 
}

Зеркальное отображение событий

Также события в текстовом блоке или в его части можно дублировать в диспетчере событий. Сначала создайте экземпляр EventDispatcher и назначьте его свойству eventMirror экземпляра TextElement. Если текстовый блок состоит из одного текстового элемента, то текстовый сервер дублирует события для всего текстового блока. Если текстовый блок содержит несколько текстовых элементов, то текстовый сервер дублирует события только для тех экземпляров TextElement, для которых задано свойство eventMirror . В следующем примере текст содержит три элемента: слово Click («щелкните»), слово here («здесь») и строку to see me in italic («для использования курсива»). Второму текстовому элементу, слову here, назначается диспетчер событий и добавляется прослушиватель событий, метод clickHandler() . Метод clickHandler() выделяет текст курсивом. Кроме того, он меняет содержимое третьего текстового элемента на строку Click here to see me in normal font! («Нажмите здесь, чтобы сделать форматирование шрифта стандартным!»).

package 
{ 
    import flash.text.engine.*; 
    import flash.ui.Mouse; 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.events.EventDispatcher; 
     
    public class EventMirrorExample extends Sprite 
    {             
        var fontDescription:FontDescription = new FontDescription("Helvetica", "bold"); 
        var format:ElementFormat = new ElementFormat(fontDescription, 18); 
        var textElement1 = new TextElement("Click ", format); 
        var textElement2 = new TextElement("here ", format); 
        var textElement3 = new TextElement("to see me in italic! ", format); 
        var textBlock:TextBlock = new TextBlock(); 
 
        public function EventMirrorExample() 
        { 
            var myEvent:EventDispatcher = new EventDispatcher(); 
             
            myEvent.addEventListener("click", clickHandler); 
            myEvent.addEventListener("mouseOut", mouseOutHandler); 
            myEvent.addEventListener("mouseOver", mouseOverHandler); 
             
            textElement2.eventMirror=myEvent; 
             
            var groupVector:Vector.<ContentElement> = new Vector.<ContentElement>; 
            groupVector.push(textElement1, textElement2, textElement3); 
            var groupElement:GroupElement = new GroupElement(groupVector); 
             
            textBlock.content = groupElement; 
            createLines(textBlock); 
        } 
             
        private function clickHandler(event:MouseEvent):void 
        { 
            var newFont:FontDescription = new FontDescription(); 
            newFont.fontWeight = "bold"; 
         
            var newFormat:ElementFormat = new ElementFormat(); 
            newFormat.fontSize = 18; 
            if(textElement3.text == "to see me in italic! ") { 
                newFont.fontPosture = FontPosture.ITALIC; 
                textElement3.replaceText(0,21, "to see me in normal font! "); 
            } 
            else { 
                newFont.fontPosture = FontPosture.NORMAL; 
                textElement3.replaceText(0, 26, "to see me in italic! "); 
            } 
            newFormat.fontDescription = newFont; 
            textElement1.elementFormat = newFormat; 
            textElement2.elementFormat = newFormat; 
            textElement3.elementFormat = newFormat; 
            createLines(textBlock); 
        } 
             
        private function mouseOverHandler(event:MouseEvent):void 
        { 
            Mouse.cursor = "button"; 
        } 
             
        private function mouseOutHandler(event:MouseEvent):void 
        { 
                Mouse.cursor = "arrow"; 
        } 
             
        private function createLines(textBlock:TextBlock):void 
        { 
            if(textBlock.firstLine) 
                removeChild (textBlock.firstLine); 
            var textLine:TextLine = textBlock.createTextLine (null, 300); 
            textLine.x = 15; 
            textLine.y = 20; 
            addChild (textLine); 
        } 
    } 
}

Функции mouseOverHandler() и mouseOutHandler() меняют курсор «стрелка» на курсор «кнопка», когда он наведен на слово here и возвращают ему прежний вид, когда он покидает область этого элемента.