Tekst opmaken

Flash Player 10 of hoger, Adobe AIR 1.5 of hoger

Een TextBlock-object is plaats waar regels tekst worden gemaakt. De inhoud van een TextBlock wordt toegewezen via het TextElement-object. Een ElementFormat-object handelt de opmaak van de tekst af. De klasse ElementFormat definieert eigenschappen zoals basislijnuitlijning, tekenspatiëring, tekstspatiëring, tekstrotatie en tekengrootte, -kleur en hoofd-/kleine letter. De klasse omvat ook een FontDescription, die nader wordt beschreven in Werken met lettertypen.

Het ElementFormat-object gebruiken

De constructor voor het ElementFormat-object kan worden gebruikt met een lange lijst optionele parameters, waaronder een FontDescription. U kunt deze eigenschappen ook buiten de constructor instellen. In het volgende voorbeeld wordt de relatie getoond van de verschillende objecten bij het definiëren en weergeven van een eenvoudige tekstregel:

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class ElementFormatExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
        private var str:String; 
        private var tl:TextLine; 
 
        public function ElementFormatExample() 
        { 
            fd.fontName = "Garamond"; 
            ef = new ElementFormat(fd); 
            ef.fontSize = 30; 
            ef.color = 0xFF0000; 
            str = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            tl = tb.createTextLine(null,600); 
            addChild(tl); 
        } 
    } 
}

Lettertypekleur en transparantie (alfa)

Met de eigenschap color van het ElementFormat-object wordt de lettertypekleur ingesteld. De waarde is een geheel getal dat de RGB-componenten van de kleur weergeeft; bijvoorbeeld 0xFF0000 voor rood en 0x00FF00 voor groen. De standaardwaarde is zwart (0x000000).

Met de eigenschap alpha wordt de alfatransparantiewaarde van een element ingesteld (zowel TextElement als GraphicElement). Waarden kunnen variëren van 0 (volledig transparant) tot 1 (volledig ondoorzichtig, hetgeen de standaardwaarde is). Elementen met een alpha van 0 zijn onzichtbaar, maar wel actief. Deze waarde wordt vermenigvuldigd met eventuele overgeërfde alfawaarden, waardoor het element transparanter wordt.

var ef:ElementFormat = new ElementFormat(); 
ef.alpha = 0.8; 
ef.color = 0x999999; 

Basislijnuitlijning en -verschuiving

Het lettertype en de grootte van de grootste tekst op een regel bepaalt de dominante basislijn. U kunt deze waarde overschrijven door TextBlock.baselineFontDescription en TextBlock.baselineFontSize in te stellen. U kunt de dominante basislijn uitlijnen met een van een reeks basislijnen in de tekst. Deze basislijnen bevatten de stoklijn en de staartlijn of de ideografische boven- of onderkant of het ideografische midden.

Tekst die de stoklijn, basislijn, staartlijn en x-hoogte weergeeft
A.
Stok

B.
Basislijn

C.
Staart

D.
x-hoogte

In het ElementFormat-object bepalen drie eigenschappen de basislijn- en uitlijningskenmerken. Met de eigenschap alignmentBaseline wordt de hoofdbasislijn van een TextElement of GraphicElement ingesteld. Deze basislijn is de “magnetische” lijn voor het element en tevens de positie waarop de dominante basislijn van alle tekst wordt uitgelijnd.

Met de eigenschap dominantBaseline wordt bepaald welke van de verschillende basislijnen van het element moet worden gebruikt. Dit bepaalt de verticale positie van het element op de lijn. De standaardwaarde is TextBaseline.ROMAN, maar dit kan ook zodanig worden ingesteld dat de IDEOGRAPHIC_TOP- of IDEOGRAPHIC_BOTTOM-basislijn dominant is.

Met de eigenschap baselineShift wordt de basislijn een aantal pixels op de y-as verplaatst. Bij normale (niet geroteerde) tekst wordt de basislijn met een positieve waarde omlaag en met een negatieve waarde omhoog verplaatst.

Hoofdletters/kleine letters

Met de eigenschap TypographicCase van ElementFormat wordt aangegeven of tekst in hoofdletters, kleine letters of als kleinkapitalen moet worden weergegeven.

 
var ef_Upper:ElementFormat = new ElementFormat(); 
ef_Upper.typographicCase = TypographicCase.UPPERCASE; 
 
var ef_SmallCaps:ElementFormat = new ElementFormat(); 
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS; 

Tekst roteren

U kunt een blok tekst of de glyphs in een tekstsegment in stappen van 90 graden roteren. Met de klasse TextRotation worden de volgende constanten gedefinieerd voor het instellen van zowel tekstblok- als glyphrotatie:

Constante

Waarde

Beschrijving

AUTO

“auto”

Geeft een rotatie van 90 graden linksom aan. Dit wordt doorgaans gebruikt bij verticale Aziatische tekst om alleen glyphs te roteren die rotatie behoeven.

ROTATE_0

“rotate_0”

Geeft geen rotatie aan.

ROTATE_180

“rotate_180”

Geeft 180 graden rotatie aan

ROTATE_270

“rotate_270”

Geeft 270 graden rotatie aan.

ROTATE_90

“rotate_90”

Geeft een rotatie van 90 rechtsom aan.

Als u de regels tekst in een tekstblok wilt roteren, stelt u de eigenschap TextBlock.lineRotation in voordat u de methode TextBlock.createTextLine() aanroept om de tekstregel te maken.

Als u de glyphs in een blok tekst of een segment wilt roteren, stelt u de eigenschap ElementFormat.textRotation in op het aantal graden dat u de glyphs wilt roteren. Een glyph is de vorm waaruit een teken bestaat of een deel van een teken dat uit meerdere glyphs bestaat. De letter a en de punt op een i zijn bijvoorbeeld glyphs.

Het roteren van glyphs is relevant in sommige Aziatische talen, waarin u de regels naar verticaal wilt roteren, maar niet de tekens binnen de regels. Zie Oost-Aziatische tekst uitvullen voor meer informatie over het roteren van Aziatische tekst.

Hier is een voorbeeld van het roteren van zowel een blok tekst als de glyphs daarin, zoals gebruikelijk bij Aziatische tekst. In het voorbeeld wordt ook een Japans lettertype gebruikt:

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class RotationExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
        private var str:String; 
        private var tl:TextLine; 
 
        public function RotationExample() 
        { 
            fd.fontName = "MS Mincho"; 
            ef = new ElementFormat(fd); 
            ef.textRotation = TextRotation.AUTO; 
            str = "This is rotated Japanese text"; 
            te = new TextElement(str, ef); 
            tb.lineRotation = TextRotation.ROTATE_90; 
            tb.content = te; 
            tl = tb.createTextLine(null,600); 
            addChild(tl); 
        } 
    } 
}

ElementFormat vergrendelen en klonen

Wanneer een ElementFormat-object wordt toegewezen aan een type ContentElement, wordt de eigenschap locked automatisch ingesteld op true. Als geprobeerd wordt een vergrendeld ElementFormat-object te wijzigen, leidt dit tot een IllegalOperationError. De beste manier is om een dergelijk object volledig te definiëren voordat u het toewijst aan een TextElement-instantie.

Als u een bestaande ElementFormat-instantie wilt wijzigen, controleert u eerst de eigenschap locked ervan. Als deze is ingesteld op true, gebruikt u de methode clone() om een ontgrendelde kopie van het object te maken. De eigenschappen van dit onvergrendelde object kunnen worden gewijzigd en dit object kan vervolgens worden toegewezen aan de TextElement-instantie. Nieuwe regels die hiermee worden gemaakt, hebben de nieuwe opmaak. Eerdere regels die zijn gemaakt met hetzelfde object en die de oude opmaak gebruiken, blijven ongewijzigd.

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class ElementFormatCloneExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef1:ElementFormat; 
        private var ef2:ElementFormat; 
         private var fd:FontDescription = new FontDescription(); 
 
        public function ElementFormatCloneExample() 
        { 
            fd.fontName = "Garamond"; 
            ef1 = new ElementFormat(fd); 
            ef1.fontSize = 24; 
            var str:String = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            var tx1:TextLine = tb.createTextLine(null,600); 
            addChild(tx1); 
             
            ef2 = (ef1.locked) ? ef1.clone() : ef1; 
            ef2.fontSize = 32; 
            tb.content.elementFormat = ef2; 
            var tx2:TextLine = tb.createTextLine(null,600); 
            addChild(tx2); 
        } 
    } 
}