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
.
|
|
|