È inoltre possibile fare corrispondere gli eventi applicati a un blocco di testo, o porzione dello stesso, a un dispatcher di eventi. Innanzi tutto, creare un'istanza EventDispatcher e assegnarla alla proprietà
eventMirror
di un'istanza TextElement. Se il blocco di testo è costituito da un solo elemento testuale, il motore del testo rende speculari gli eventi per l'intero blocco di testo. Se il blocco di testo è costituito da più elementi testuali, il motore del testo rende speculari gli eventi soltanto per le istanze TextElement per le quali è stata impostata la proprietà
eventMirror
. Il testo dell'esempio seguente è costituito da tre elementi: la parola "Click", la parola "here" e la stringa "to see me in italic". Nell'esempio viene assegnato un dispatcher di eventi al secondo elemento testuale, la parola "here", e viene aggiunto un listener di eventi, il metodo
clickHandler()
. Il metodo
clickHandler()
trasforma il testo in corsivo e sostituisce il contenuto del terzo elemento testuale affinché contenga la frase "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);
}
}
}
Le funzioni
mouseOverHandler()
e
mouseOutHandler()
trasformano il cursore in un cursore per pulsante quando si trova sulla parola "here" e lo riportano alla forma di una freccia quando non si trova più su tale parola.