Skapa och visa text

Flash Player 10 och senare, Adobe AIR 1.5 och senare

Med klasserna i Flash-textmotorn kan du skapa, formatera och styra text. Följande klasser är de grundläggande byggstenarna när du skapar och visar text med Flash-textmotorn:

  • TextElement/GraphicElement/GroupElement - lagrar innehållet i en TextBlock-instans

  • ElementFormat - anger formateringsattribut för innehållet i en TextBlock-instans

  • TextBlock - används när du skapar ett textstycke

  • TextLine - en textrad som skapats av ett TextBlock

Visa texten genom att skapa ett TextElement-objekt från en med ett ElementFormat-objekt för att ange formateringsegenskaperna. Tilldela TextElement till egenskapen content för ett TextBlock-objekt. Skapa textraderna som ska visas genom att anropa metoden TextBlock.createTextLine(). Metoden createTextLine() returnerar ett TextLine-objekt som innehåller så mycket av strängen som ryms i den angivna bredden. Anropa metoden upprepade gånger tills hela strängen har formaterats till olika rader. När alla rader har skapats tilldelas textLineCreationResult-egenskapen för TextBlock-objektet värdet: TextLineCreationResult.COMPLETE. Om du vill visa raderna lägger du till dem i visningslistan (med respektive x- och y-positionsvärden).

I koden nedan används dessa FTE-klasser för att visa texten ”Hello World! This is Flash Text Engine!” med standardvärden för format och teckensnitt. I det här enkla exemplet har endast en textrad skapats.

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

Parametrarna för createTextLine() anger raden där den nya raden ska börja och radens bredd i pixlar. Raden från vilken nästa rad börjar är vanligtvis den föregående raden, men för den första raden är värdet null.

Lägga till GraphicElement- och GroupElement-objekt

Du kan tilldela ett GraphicElement-objekt till ett TextBlock-objekt när du vill visa en bild eller ett grafikelement. Skapa bara en instans av GraphicElement-klassen av en grafikbild eller annan bild och tilldela instansen till egenskapen TextBlock.content. Skapa textraden genom att anropa TextBlock.createTextline() som vanligt. I exemplet nedan skapas två textrader, en med ett GraphicElement-objekt och en med ett TextElement-objekt.
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; 
        } 
    } 
}
Du kan skapa ett GroupElement-objekt om du vill skapa en grupp av TextElement-, GraphicElement- och andra GroupElement-objekt. Ett GroupElement kan tilldelas till egenskapen content för ett TextBlock-objekt. Parametern för GroupElement()-konstruktorn är en vektor som pekar till text-, grafik- och gruppelementen som ingår i gruppen. I exemplet nedan grupperas två grafikelement och ett textelement och de tilldelas som en enhet till ett textblock.
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; 
        } 
    } 
}

Ersätta text

Du kan ersätta text i en TextBlock-instans genom att anropa TextElement.replaceText() för att ersätta text i det textelement som du tilldelade till egenskapen TextBlock.content.

I exemplet nedan används replaceText() för att först infoga text i början av raden, sedan lägga till text i slutet av raden och slutligen ersätta text i mitten av raden.
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); 
        } 
    } 
}

Metoden replaceText() ersätter texten som anges med parametrarna beginIndex och endIndex med texten som anges i parametern newText. Om värdena för parametrarna beginIndex och endIndex är lika, infogar replaceText() den angivna texten på den platsen. Annars ersätts tecknen som anges med beginIndex och endIndex av den nya texten.