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.