Creación y visualización de texto

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

Las clases que conforman Flash Text Engine permiten crear texto, aplicarle formato y controlarlo. Las clases siguientes son los componentes esenciales para crear y mostrar texto con Flash Text Engine:

  • TextElement/GraphicElement/GroupElement: incluyen el contenido de una instancia de TextBlock.

  • ElementFormat: especifica los atributos de formato para el contenido de una instancia de TextBlock.

  • TextBlock - componente fundamental para crear un párrafo de texto.

  • TextLine: una línea de texto creada a partir de TextBlock

Para mostrar el texto, cree un objeto TextElement a partir de una cadena y usando un objeto ElementFormat para especificar las características de formato. Asigne TextElement a la propiedad content de un objeto TextBlock. Las líneas de texto que se van a mostrar se crean llamando al método TextBlock.createTextLine() . El método createTextLine() devuelve un objeto TextLine que contiene parte de la cadena que se ajustará en la anchura especificada. Llame al método varias veces hasta que a toda la cadena se le haya aplicado el formato en líneas. Cuando no haya más líneas que crear, a la propiedad textLineCreationResult del objeto se le asigna el valor: TextLineCreationResult.COMPLETE . Para mostrar las líneas, añádalas a la lista de visualización (con los valores de posición x e y apropiados).

Por ejemplo, el código siguiente utiliza estas clases de FTE para mostrar el texto "Hello World! This is Flash Text Engine!", usando el formato y los valores de fuente predeterminados. En este sencillo ejemplo, únicamente se crea una sola línea de texto.

package 
{ 
    import flash.text.engine.*; 
    import flash.display.Sprite; 
     
    public class HelloWorldExample extends Sprite 
    { 
        public function HelloWorldExample() 
        { 
            var str = "Hello World! This is Flash Text Engine!"; 
            var format:ElementFormat = new ElementFormat(); 
            var textElement:TextElement = new TextElement(str, format); 
            var textBlock:TextBlock = new TextBlock(); 
            textBlock.content = textElement; 
             
            var textLine1:TextLine = textBlock.createTextLine(null, 300); 
            addChild(textLine1); 
            textLine1.x = 30; 
            textLine1.y = 30; 
        } 
    } 
}

Los parámetros para createTextLine() especifican la línea a partir de la que comienza la nueva lí­nea y su anchura en píxeles. La línea a partir de la que comienza la nueva línea suele ser la anterior pero, en caso de que sea la primera línea, es null .

Cómo añadir objetos GraphicElement y GroupElement

Para mostrar una imagen o un elemento gráfico, se puede asignar un objeto GraphicElement a un objeto TextBlock. Únicamente se debe crear una instancia de la clase GraphicElement a partir de un gráfico o una imagen y asignar la instancia a la propiedad TextBlock.content . Cree la línea de texto llamando a TextBlock.createTextline() tal y como lo haría normalmente. El ejemplo siguiente crea dos líneas de texto, una con un objeto GraphicElement y otra con un objeto TextElement.
package 
{ 
    import flash.text.engine.*; 
    import flash.display.Sprite; 
    import flash.display.Shape; 
    import flash.display.Graphics; 
 
    public class GraphicElementExample extends Sprite 
    { 
        public function GraphicElementExample() 
        { 
            var str:String = "Beware of Dog!"; 
     
            var triangle:Shape = new Shape(); 
            triangle.graphics.beginFill(0xFF0000, 1); 
            triangle.graphics.lineStyle(3); 
            triangle.graphics.moveTo(30, 0); 
            triangle.graphics.lineTo(60, 50); 
            triangle.graphics.lineTo(0, 50); 
            triangle.graphics.lineTo(30, 0); 
            triangle.graphics.endFill(); 
     
            var format:ElementFormat = new ElementFormat(); 
            format.fontSize = 20; 
             
            var graphicElement:GraphicElement = new GraphicElement(triangle, triangle.width, triangle.height, format); 
            var textBlock:TextBlock = new TextBlock(); 
            textBlock.content = graphicElement; 
            var textLine1:TextLine = textBlock.createTextLine(null, triangle.width); 
            textLine1.x = 50; 
            textLine1.y = 110; 
            addChild(textLine1); 
     
            var textElement:TextElement = new TextElement(str, format); 
            textBlock.content = textElement; 
            var textLine2 = textBlock.createTextLine(null, 300); 
            addChild(textLine2); 
            textLine2.x = textLine1.x - 30; 
            textLine2.y = textLine1.y + 15; 
        } 
    } 
}
Se puede crear un objeto GroupElement para crear un grupo de objetos TextElement, GraphicElement y otros objetos de tipo GroupElement. GroupElement se puede asignar a la propiedad content de un objeto TextBlock. El parámetro pasado al constructor GroupElement() es un Vector, que apunta a los elementos de texto, gráficos y grupo que conforman el grupo. El ejemplo siguiente agrupa dos elementos gráficos y un elemento de texto y los asigna como una unidad a un bloque de texto.
package 
{ 
    import flash.text.engine.*; 
    import flash.display.Sprite; 
    import flash.display.Shape; 
    import flash.display.Graphics; 
     
    public class GroupElementExample extends Sprite 
    { 
        public function GroupElementExample() 
        { 
            var str:String = "Beware of Alligators!"; 
 
            var triangle1:Shape = new Shape(); 
            triangle1.graphics.beginFill(0xFF0000, 1); 
            triangle1.graphics.lineStyle(3); 
            triangle1.graphics.moveTo(30, 0); 
            triangle1.graphics.lineTo(60, 50); 
            triangle1.graphics.lineTo(0, 50); 
            triangle1.graphics.lineTo(30, 0); 
            triangle1.graphics.endFill(); 
             
            var triangle2:Shape = new Shape(); 
            triangle2.graphics.beginFill(0xFF0000, 1); 
            triangle2.graphics.lineStyle(3); 
            triangle2.graphics.moveTo(30, 0); 
            triangle2.graphics.lineTo(60, 50); 
            triangle2.graphics.lineTo(0, 50); 
            triangle2.graphics.lineTo(30, 0); 
            triangle2.graphics.endFill(); 
             
            var format:ElementFormat = new ElementFormat(); 
            format.fontSize = 20; 
            var graphicElement1:GraphicElement = new GraphicElement(triangle1, triangle1.width, triangle1.height, format); 
            var textElement:TextElement = new TextElement(str, format); 
            var graphicElement2:GraphicElement = new GraphicElement(triangle2, triangle2.width, triangle2.height, format); 
            var groupVector:Vector.<ContentElement> = new Vector.<ContentElement>(); 
            groupVector.push(graphicElement1, textElement, graphicElement2); 
            var groupElement = new GroupElement(groupVector); 
            var textBlock:TextBlock = new TextBlock(); 
            textBlock.content = groupElement; 
            var textLine:TextLine = textBlock.createTextLine(null, 800); 
            addChild(textLine); 
            textLine.x = 100; 
            textLine.y = 200; 
        } 
    } 
}

Reemplazo de texto

Se puede reemplazar texto en una instancia de TextBlock llamando a TextElement.replaceText() para reemplazar el texto del elemento TextElement que asignó a la propiedad TextBlock.content .

En el ejemplo siguiente se utiliza repaceText() para insertar texto al principio de la línea, añadir texto al final de la lí­nea y reemplazar texto en medio de la línea.
package 
{ 
    import flash.text.engine.*; 
    import flash.display.Sprite; 
 
    public class ReplaceTextExample extends Sprite 
    { 
        public function ReplaceTextExample() 
        { 
     
            var str:String = "Lorem ipsum dolor sit amet"; 
            var fontDescription:FontDescription = new FontDescription("Arial"); 
            var format:ElementFormat = new ElementFormat(fontDescription); 
            format.fontSize = 14; 
            var textElement:TextElement = new TextElement(str, format); 
            var textBlock:TextBlock = new TextBlock(); 
            textBlock.content = textElement; 
            createLine(textBlock, 10); 
            textElement.replaceText(0, 0, "A text fragment: ");  
            createLine(textBlock, 30);  
            textElement.replaceText(43, 43, "...");   
            createLine(textBlock, 50);     
            textElement.replaceText(23, 28, "(ipsum)"); 
            createLine(textBlock, 70); 
        } 
             
        function createLine(textBlock:TextBlock, y:Number):void { 
            var textLine:TextLine = textBlock.createTextLine(null, 300); 
            textLine.x = 10; 
            textLine.y = y; 
            addChild(textLine); 
        } 
    } 
}

El método replaceText() reemplaza el texto especificado por los parámetros beginIndex y endIndex con el texto que especifica el parámetro newText . Si los valores de los parámetros beginIndex y endIndex son los mismos, replaceText() inserta el texto especificado en esa ubicación. De lo contrario, reemplaza los caracteres especificados mediante beginIndex y endIndex con el nuevo texto.