Tekst maken en weergeven

Flash Player 10 of hoger, Adobe AIR 1.5 of hoger

Met de klassen waaruit de Flash Text Engine bestaat, kunt u tekst maken, opmaken en besturen. De volgende klassen vormen de elementaire bouwstenen voor het maken en weergeven van tekst met de Flash Text Engine:

  • TextElement/GraphicElement/GroupElement: deze bevatten de inhoud van een TextBlock-instantie

  • ElementFormat: hiermee worden opmaakkenmerken aangegeven voor de inhoud van een TextBlock-instantie

  • TextBlock: de plaats waar een alinea tekst wordt opgebouwd

  • TextLine: een regel tekst die is gemaakt van het TextBlock

Als u tekst wilt weergeven, maakt u een TextElement-object van een String met behulp van een ElementFormat-object om de opmaakkenmerken te definiëren. Vervolgens wijst u het TextElement-object toe aan de eigenschap content van een TextBlock-object. Maak de regels tekst die moeten worden weergegeven door de methode TextBlock.createTextLine() aan te roepen. De methode createTextLine() retourneert een TextLine-object dat het deel van de tekenreeks bevat dat in de opgegeven breedte past. Roep de methode herhaaldelijk aan totdat de volledige tekenreeks in de regels past. Wanneer er geen regels meer moeten worden gemaakt, wordt de waarde TextLineCreationResult.COMPLETE toegewezen aan de eigenschap textLineCreationResult van het TextBlock-object. Als u de regels wilt weergeven, voegt u deze toe aan de weergave lijst (met bijbehorende positiewaarden x en y).

In de volgende code worden bijvoorbeeld deze FTE-klassen gebruikt om 'Hello World! This is Flash Text Engine!" weer te geven, met standaardopmaak en -lettertypewaarden. In dit eenvoudige voorbeeld wordt slechts één tekstregel gemaakt.

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; 
        } 
    } 
}

De parameters voor createTextLine() geven de regel op waarvan de nieuwe regel moet beginnen en de breedte van de regel in pixels. De regel waarvan de nieuwe regel moet beginnen is doorgaans de vorige regel, maar in het geval van de eerste regel is dit null.

GraphicElement- en GroupElement-objecten toevoegen

U kunt een GraphicElement-object toewijzen aan een TextBlock-object om een afbeelding of een grafisch element weer te geven. Maak eenvoudigweg een instantie van de klasse GraphicElement vanuit een afbeelding en wijs de instantie toe aan de eigenschap TextBlock.content. Maak de tekstregel door TextBlock.createTextline() aan te roepen zoals u normaal zou doen. In het volgende voorbeeld worden twee tekstregels gemaakt: één met een GraphicElement-object en één met een TextElement-object.
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; 
        } 
    } 
}
U kunt een GroupElement-object maken om een groep te maken van TextElement-, GraphicElement- en andere GroupElement-objecten. U kunt een GroupElement toewijzen aan de eigenschap content van een TextBlock-object. De parameter voor de constructor GroupElement() is een vector, die wijst naar de tekst, afbeelding en groepselementen die de groep uitmaken. In het volgende voorbeeld worden twee grafische elementen en een tekstelement gegroepeerd en worden deze als eenheid toegewezen aan een tekstblok.
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; 
        } 
    } 
}

Tekst vervangen

U kunt tekst in een TextBlock-instantie vervangen door TextElement.replaceText() aan te roepen om tekst te vervangen in het TextElement dat u hebt toegewezen aan de eigenschap TextBlock.content.

In het volgende voorbeeld wordt replaceText() gebruikt om tekst aan het begin van de regel in te voegen, tekst aan het einde van de regel toe te voegen en tekst in het midden van de regel te vervangen.
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); 
        } 
    } 
}

Met de methode replaceText() vervangt u tekst die is opgegeven in de parameters beginIndex en endIndex door de tekst die is aangegeven door de paramater newText. Als de waarden van de parameters beginIndex en endIndex hetzelfde zijn, voegt replaceText() de opgegeven tekst in op die locatie. Anders worden de tekens die worden aangegeven met beginIndex en endIndex vervangen door de nieuwe tekst.