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.