Obsługa zdarzeń w mechanizmie FTE

Flash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje

Do instancji klasy TextLine można dodawać detektory zdarzeń, podobnie jak do innych obiektów wyświetlanych. Możliwe jest na przykład wykrywanie naprowadzenia wskaźnika myszy nad wiersz tekstu lub kliknięcia wiersza. Poniższy przykład ilustruje wykrywanie obu tych zdarzeń. Gdy wskaźnik myszy zostanie umieszczony nad wierszem, przyjmuje kształt wskaźnika przycisku, zaś kliknięcie wiersza powoduje zmianę jego koloru.
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); 
        } 
    } 
}

Odzwierciedlanie zdarzeń

Możliwe jest także odzwierciedlanie zdarzeń z bloku tekstowego lub części bloku tekstowego do obiektu wywołującego. Najpierw należy utworzyć instancję klasy EventDispatcher, a następnie przypisać ją do właściwości eventMirror instancji klasy TextElement. Jeśli blok tekstu składa się z pojedynczego elementu tekstowego, mechanizm tekstowy będzie odzwierciedlał zdarzenia dla całego bloku tekstu. Jeśli blok tekstu składa się z wielu elementów tekstowych, mechanizm tekstowy odzwierciedla zdarzenia tylko tych instancji klasy TextElement, które mają ustawioną właściwość eventMirror . Tekst w poniższym przykładzie składa się z trzech elementów: słowa "Click", słowa "here" i ciągu znaków "to see me in italic". W przykładzie tym obiekt wywołujący zdarzenia jest przypisywany do trzeciego elementu tekstowego, słowa "here", a następnie dodawany jest detektor zdarzeń, metoda clickHandler() . Metoda clickHandler() zmienia format tekstu na kursywę. Zastępuje ponadto treść trzeciego elementu tekstowego ciągiem znaków "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); 
        } 
    } 
}

Funkcje mouseOverHandler() i mouseOutHandler() zmieniają kształt wskaźnika myszy na wskaźnik przycisku, gdy znajduje się on nad słowem "here", oraz z powrotem na strzałkę, gdy nie znajduje się nad tym słowem.