Criação e exibição de texto

Flash Player 10 e posterior, Adobe AIR 1.5 e posterior

Essas classes que compõe o Flash Text Engine permitem a criação, formatação e controle de texto. As classes a seguir são blocos de construção básicos para criação e exibição de texto com o Flash Text Engine:

  • TextElement/GraphicElement/GroupElement - contém o conteúdo de uma instância do TextBlock

  • ElementFormat - especifica os atributos de formatação do conteúdo de uma instância do TextBlock

  • TextBlock - a fábrica para construção de um parágrafo de texto

  • TextLine - uma linha de texto criada a partir do TextBlock

Para exibir texto, crie um objeto TextElement de um String usando um objeto ElementFormat para especificar as características de formatação. Atribua o TextElement à propriedade content de um objeto TextBlock. Crie as linhas de texto da exibição chamando o método TextBlock.createTextLine() . O método createTextLine() retorna um objeto TextLine que contém tantas strings quantas vão se ajustar na largura especificada. Chame o método repetidamente até que toda a string tenha sido formatada em linhas. Quando não houver mais linhas para criar, à propriedade textLineCreationResult do objeto TextBlock é atribuído o valor: TextLineCreationResult.COMPLETE . Para mostrar as linhas, acrescente-as à lista de exibição (com os valores apropriados da posição x e y ).

O código a seguir, por exemplo, usa as classes FTE para exibir "Hello World!". This is Flash Text Engine!" (Olá a todos, esse é o Flash Text Engine), usando o formato e os valores de fonte padrão. Neste exemplo simples, é criada apenas uma linha 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; 
        } 
    } 
}

Os parâmetros para createTextLine() especificam a linha a partir de qual inicia a nova linha e a largura da linha em pixels. A linha a partir da qual se inicia a nova linha é, normalmente, a linha anterior, contudo, no caso da primeira linha, ela é null .

Adição dos objetos GraphicElement e GroupElement

É possível atribuir um objeto GraphicElement para um objeto TextBlock a fim de exibir uma imagem ou um elemento gráfico. Simplesmente, crie uma instância da classe GraphicElement de um gráfico ou de uma imagem e atribua a instância para a propriedade TextBlock.content . Crie a linha de texto chamando TextBlock.createTextline() como você faz normalmente. O exemplo a seguir cria duas linhas de texto, uma com um objeto GraphicElement e outra com um 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; 
        } 
    } 
}
Você pode criar um objeto GroupElement para criar um grupo de objetos TextElement, GraphicElement, e outros objetos GroupElement. Um GroupElement pode ser atribuído à propriedade content de um objeto TextBlock. O parâmetro para o construtor GroupElement() é um Vetor, que aponta para os elementos de texto, gráficos e de grupo que formam o grupo. O exemplo a seguir agrupa dois elementos gráficos e um elemento de texto e os designa como unidade para um bloco 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; 
        } 
    } 
}

Substituição de texto

É possível substituir texto em uma ocorrência de TextBlock chamando TextElement.replaceText() para substituir o texto no TextElement que você atribuiu à propriedade TextBlock.content .

O exemplo a seguir usa replaceText() para primeiro inserir texto no início da linha, depois anexar texto ao final da linha e por fim substituir texto no meio da linha.
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); 
        } 
    } 
}

O método replaceText() substitui o texto especificado pelos parâmetros beginIndex e endIndex pelo texto especificado pelo parâmetro newText . Se os valores dos parâmetros beginIndex e endIndex forem idênticos, replaceText() inserirá o texto especificado nesse local. Caso contrário, ele substituirá pelo novo texto os caracteres especificados por beginIndex e endIndex .