Metin oluşturma ve görüntüleme

Flash Player 10 ve üstü, Adobe AIR 1.5 ve üstü

Flash Metin Motoru'nu oluşturan sınıflar, metin oluşturmanıza, biçimlendirmenize ve denetlemenize olanak sağlar. Aşağıdaki sınıflar, Flash Metin Motoru ile metin oluşturmak ve görüntülemek için temel bina bloklarıdır:

  • TextElement/GraphicElement/GroupElement - bir TextBlock örneğinin içeriğini içerir

  • ElementFormat - bir TextBlock örneğinin içeriği için biçimlendirme niteliklerini belirtir

  • TextBlock - bir metin paragrafı oluşturmak için kullanılan fabrika

  • TextLine - TextBlock'tan oluşturulan bir metin satırı

Metni görüntülemek için, biçimlendirme karakteristiklerini belirleme amacıyla bir ElementFormat nesnesi kullanarak bir Dizeden bir TextElement nesnesi oluşturun. TextElement öğesini bir TextBlock nesnesinin içerik özelliğine atayın. TextBlock.createTextLine() yöntemini çağırarak görüntülenecek metnin satırlarını oluşturun. createTextLine() yöntemi, belirlenen genişliğe sığabilecek Dize miktarını içeren TextLine nesnesini geri getirir. Yöntemi dizenin tamamı satırlar halinde olacak şekilde biçimlendirilene kadar çağırın. Oluşturulacak satır kalmadığında, TextBlock nesnesinin textLineCreationResult özelliği TextLineCreationResult.COMPLETE değerine atanır. Satırları göstermek için, onları görüntüleme listesine ekleyin (uygun x ve y konum değerleriyle).

Örneğin aşağıdaki kod, varsayılan biçim ve font değerleriyle "Hello World! This is Flash Text Engine!" metnini görüntülemek için bu FTE sınıflarını kullanır. Bu basit örnekte, yalnızca tek bir metin satırı oluşturulur.

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() parametreleri, yeni satırın başlayacağı satırı ve piksel cinsinden satırın genişliğini belirtir. Yeni satırın başlayacağı satır genellikle önceki satırdır, ancak ilk satır söz konusu olduğunda bu null olacaktır.

GraphicElement ve GroupElement nesneleri ekleme

Bir görüntü veya grafik öğe görüntülemek amacıyla TextBlock nesnesine bir GraphicElement nesnesi atayabilirsiniz. Bir grafik veya görüntüden GraphicElement sınıfının bir örneğini oluşturmanız ve örneği TextBlock.content özelliğine atamanız yeterlidir. Normalde yaptığınız gibi TextBlock.createTextline() öğesini çağırarak metin satırını oluşturun. Aşağıdaki örnek, biri bir GraphicElement nesnesi, diğeri ise bir TextElement nesnesi içeren iki metin satırı oluşturur.
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; 
        } 
    } 
}
TextElement, GraphicElement ve diğer GroupElement nesnelerinden bir grup oluşturmak için bir GroupElement nesnesi oluşturabilirsiniz. Bir GroupElement, bir TextBlock nesnesinin içerik özelliğine atanabilir. GroupElement() yapıcısının parametresi, metne, grafiğe ve grubu oluşturan grup öğelerine işaret eden bir Vektördür. Aşağıdaki örnek, iki grafik öğesini ve bir metin öğesini gruplandırır ve bunları bir birim olarak metin bloğuna atar.
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; 
        } 
    } 
}

Metni değiştirme

Bir TextBlock örneğindeki metni, TextBlock.content özelliğine atadığınız TextElement öğesindeki metni değiştirmek için TextElement.replaceText() öğesini çağırarak değiştirebilirsiniz.

Aşağıdaki örnek, satırın başlangıcına ilk olarak satırın başına metin eklemek, sonra satırın sonuna metin eklemek ve son olarak satırın ortasındaki metni değiştirmek için replaceText() öğesini kullanır.
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() yöntemi, beginIndex ve endIndex parametrelerinin belirttiği metni, newText parametresinin belirttiği metinle değiştirir. beginIndex ve endIndex parametrelerinin değerleri aynıysa, replaceText() belirtilen metni bu konuma ekler. Aksi takdirde, beginIndex ve endIndex parametrelerinin belirttiği karakterleri yeni metinle değiştirir.