Классы, включенные во Flash Text Engine, позволяют создавать, форматировать и контролировать текст. Перечисленные ниже классы являются основными элементами для создания и отображения текста с помощью Flash Text Engine:
-
TextElement/GraphicElement/GroupElement включают в себя содержимое экземпляра TextBlock
-
ElementFormat указывает атрибуты форматирования для содержимого экземпляра TextBlock;
-
TextBlock представляет собой основной фабрику для создания абзаца текста;
-
TextLine — это строка текста, созданная из экземпляра TextBlock.
Чтобы отобразить текст, создайте объект TextElement на основе переменной String с использованием объекта ElementFormat для задания характеристик форматирования. Назначьте элемент TextElement свойству
content
объекта TextBlock. Создайте строки текста для отображения посредством вызова метода
TextBlock.createTextLine()
. Метод
createTextLine()
возвращает объект TextLine, содержащий ту часть строки, которая соответствует заданной ширине. Циклически вызывайте метод, пока вся строка не будет отформатирована в строках. После создания всех необходимых строк свойству textLineCreationResult объекта TextBlock присваивается значение
TextLineCreationResult.COMPLETE
. Чтобы показать строки, добавьте их в список отображения (с соответствующими значениями расположения
x
и
y
).
Например, в следующем коде используются эти классы FTE для отображения текста «Hello World! This is Flash Text Engine!» (Здравствуй, мир! Это Flash Text Engine!) с использование значений по умолчанию для формата и шрифта. В этом простом примере создается только одна строка текста.
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;
}
}
}
Параметры для
createTextLine()
указывают строку, с которой должна начинаться новая строка, а также ширину строки в пикселах. Как правило, строкой, с которой должна начинаться новая строка, является предыдущая строка, но в случае с первой строкой используется значение
null
.
Добавление объектов GraphicElement и GroupElement
Объекту TextBlock можно присвоить объект GraphicElement, чтобы отобразить изображение или графический элемент. Создайте экземпляр класса GraphicElement, содержащий графику или изображение, и назначьте его свойству
TextBlock.content
. Создайте текстовую строку с помощью метода
TextBlock.createTextline()
стандартным способом. В следующем примере создаются две строки, одна с объектом GraphicElement, а другая с объектом 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;
}
}
}
Можно создать объект GroupElement для создания группы объектов TextElement, GraphicElement и других объектов GroupElement. Объект GroupElement можно назначить свойству
content
объекта TextBlock. Параметром конструктора
GroupElement()
является Vector, который указывает на текстовые, графические или групповые элементы, включенные в группу. В следующем примере группируются два графических элемента и один текстовый, и полученная группа присваивается текстовому блоку.
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;
}
}
}
Замена текста
Чтобы заменить текст в экземпляре TextBlock, нужно вызвать метод
TextElement.replaceText()
, который заменит текст в объекте TextElement, назначенном свойству
TextBlock.content
.
В следующем примере используется метод
repaceText()
, который сначала вставляет текст в начало строки, затем добавляет текст в конец строки и, наконец, заменяет текст в середине строки.
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);
}
}
}
Метод
replaceText()
заменяет текст, заданный параметрами
beginIndex
и
endIndex
, текстом, определенном в параметре
newText
. Если значения
beginIndex
и
endIndex
имеют одинаковое значение, метод
replaceText()
вставляет указанный текст в этом местоположении. В противном случае он заменяет символы в диапазоне от
beginIndex
до
endIndex
новым текстом.
|
|
|