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.
|
|
|