Klasy składające się na mechanizm Flash Text Engine umożliwiają tworzenie, formatowanie tekstu i sterowanie nim. Następujące klasy są podstawowymi elementami składowymi służącymi do tworzenia i wyświetlania tekstu w mechanizmie Flash Text Engine:
-
TextElement/GraphicElement/GroupElement — zawierają treść instancji TextBlock.
-
ElementFormat — określa atrybuty formatowania treści instancji TextBlock.
-
TextBlock — generator akapitów tekstu.
-
TextLine — wiersz tekstu utworzony z obiektu TextBlock.
Aby wyświetlić tekst, należy utworzyć obiekt TextElement na podstawie obiektu String, używając obiektu ElementFormat do określenia parametrów formatowania. Obiekt TextElement należy przypisać do właściwości
content
obiektu TextBlock. Wiersze tekstu do wyświetlania tworzy się, wywołując metodę
TextBlock.createTextLine()
. Metoda
createTextLine()
zwraca obiekt TextLine zawierający taką część ciągu, jaka zmieści się w podanej szerokości. Należy wywoływać metodę wielokrotnie, dopóki cały łańcuch nie zostanie podzielony na wiersze. Gdy nie ma już więcej wierszy do utworzenia, właściwość textLineCreationResult obiektu TextBlock otrzymuje wartość:
TextLineCreationResult.COMPLETE
. Aby wyświetlić wiersze, należy dodać je do listy wyświetlania (z odpowiednimi wartościami pozycji
x
i
y
).
Poniższy przykładowy kod wykorzystuje te klasy FTE do wyświetlenia napisu "Hello World! This is Flash Text Engine!" z domyślnymi ustawieniami formatowania i czcionki. W tym prostym przykładzie tworzony jest tylko jeden wiersz tekstu.
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;
}
}
}
Parametry metody
createTextLine()
określają wiersz, od którego ma się rozpocząć nowy wiersz, oraz szerokość wiersza w pikselach. Wiersz, od którego ma się rozpocząć nowy wiersz, to zazwyczaj poprzedni wiersz, jednak w przypadku pierwszego wiersza odpowiedni parametr ma wartość
null
.
Dodawanie obiektów GraphicElement i GroupElement
Istnieje możliwość przypisania obiektu GraphicElement do obiektu TextBlock w celu wyświetlenia obrazu lub elementu graficznego. Wystarczy utworzyć instancję klasy GraphicElement na podstawie grafiki lub obrazu i przypisać tę instancję do właściwości
TextBlock.content
. Wiersz tekstu należy utworzyć w zwykły sposób, wywołując metodę
TextBlock.createTextline()
. W poniższym przykładzie tworzone są dwa wiersze tekstu, jeden z obiektem GraphicElement i jeden z obiektem 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;
}
}
}
Istnieje możliwość utworzenia obiektu GroupElement grupującego obiekty TextElement, GraphicElement i inne elementy GroupElement. Obiekt GroupElement można przypisać do właściwości
content
obiektu TextBlock. Parametr konstruktora
GroupElement()
jest obiektem Vector wskazującym na elementy tekstowe, graficzne i grupy składające się na daną grupę. Poniższy przykład grupuje dwa elementy graficzne i element tekstowy, a następnie przypisuje je do bloku tekstowego jako jeden obiekt.
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;
}
}
}
Zastępowanie tekstu
Można zastąpić tekst w instancji klasy TextBlock, wywołując metodę
TextElement.replaceText()
w celu zastąpienia tekstu w obiekcie TextElement przypisanym do właściwości
TextBlock.content
.
W poniższym przykładzie użyto metody
replaceText()
do wstawienia tekstu na początku wiersza, dołączenia tekstu na końcu wiersza i zastąpienia tekstu pośrodku wiersza.
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);
}
}
}
Metoda
replaceText()
zastępuje tekst określony przez parametry
beginIndex
i
endIndex
tekstem określonym przez parametr
newText
. Jeśli wartości parametrów
beginIndex
i
endIndex
są równe, metoda
replaceText()
wstawia określony tekst we wskazanym miejscu. W przeciwnym razie zastępuje nowym tekstem znaki określone przez indeksy
beginIndex
i
endIndex
.
|
|
|