También se pueden reflejar los eventos de un bloque de texto, o de una parte de un bloque de texto, en un distribuidor de eventos. En primer lugar, se crea una instancia de EventDispatcher y se asigna a la propiedad
eventMirror
de una instancia de TextElement. Si el bloque de texto consta de un solo elemento de texto, el motor de texto refleja los eventos de todo el bloque. Si el bloque de texto está formado por varios elementos de texto, el motor de texto solo refleja los eventos de las instancias de TextElement que tienen establecida la propiedad
eventMirror
. El texto del siguiente ejemplo consta de tres elementos: la palabra "Click", la palabra "here" y la cadena "to see me in italic". El ejemplo asigna un distribuidor de eventos al segundo elemento de texto, la palabra "here", y añade un detector de eventos, el método
clickHandler()
. El método
clickHandler()
aplica al texto formato de cursiva. Asimismo, reemplaza el contenido del tercer elemento de texto para que se lea, "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);
}
}
}
Las funciones
mouseOverHandler()
y
mouseOutHandler()
cambian el cursor a un cursor de botón cuando se encuentra sobre la palabra "here" y le devuelven la forma de flecha cuando no lo está.