создание и отображение текста

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

Классы, включенные во 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 новым текстом.