Flash Player 10 et les versions ultérieures, Adobe AIR 1.5 et les versions ultérieures
Un objet
TextBlock
est un objet usine pour la création de lignes de texte. Le contenu d’un objet
TextBlock
est affecté via l’objet
TextElement
. Un objet
ElementFormat
gère la mise en forme du texte. La classe ElementFormat définit certaines propriétés, telles que l’alignement sur la ligne de base, le crénage, l’interlettrage, la rotation du texte, la taille et la couleur des polices, ainsi que la casse. Elle comprend également la méthode
FontDescription
, décrite en détail à la section
Utilisation des polices
.
Utilisation de l’objet ElementFormat
Le constructeur de l’objet
ElementFormat
prend des nombreux paramètres facultatifs, dont
FontDescription
. Vous pouvez également définir ces propriétés en dehors du constructeur. L’exemple suivant illustre la relation des différents objets lors de la définition et de l’affichage d’une ligne de texte simple :
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);
}
}
}
Couleur de police et transparence (alpha)
La propriété
color
de l’objet
ElementFormat
définit la couleur de police. La valeur est un entier représentant les composants RVB de la couleur, par exemple : 0xFF0000 pour le rouge et 0x00FF00 pour le vert. La valeur par défaut est noir (0x000000).
La propriété
alpha
définit la valeur de transparence alpha d’un élément (
TextElement
et
GraphicElement
). La plage des valeurs est comprise entre 0 (complètement transparent) et 1 (complètement opaque), qui est la valeur par défaut. Les éléments dont la propriété
alpha
est de 0 sont invisibles, mais restent actifs. Cette valeur est multipliée par l’une des valeurs alpha héritées, ce qui rend l’élément plus transparent.
var ef:ElementFormat = new ElementFormat();
ef.alpha = 0.8;
ef.color = 0x999999;
Alignement et décalage de la ligne de base
La police et la taille du plus grand texte dans une ligne déterminent sa ligne de base dominante. Vous pouvez écraser ces valeurs en définissant
TextBlock.baselineFontDescription
et
TextBlock.baselineFontSize
. Vous pouvez aligner la ligne de base dominante sur l’une des lignes de bases du texte, à savoir la ligne ascendante, la ligne descendante, ou la ligne de base idéographique supérieure, centrale ou inférieure.
-
A.
-
Ascendante
-
B.
-
Ligne de base
-
C.
-
Descendante
-
D.
-
Hauteur-x
Dans l’objet
ElementFormat
, trois propriétés déterminent la ligne de base et les caractéristiques d’alignement. La propriété
alignmentBaseline
définit la ligne de base principale d’un objet
TextElement
ou
GraphicElement
. Cette ligne de base est la ligne « d’accrochage ».de l’élément, et c’est à cette position que la ligne de base dominante du texte s’aligne.
La propriété
dominantBaseline
indique la ligne de base de l’élément à utiliser, qui détermine la position verticale de l’élément sur la ligne. La valeur par défaut est
TextBaseline.ROMAN
, mais vous pouvez également stipuler que la ligne de base
IDEOGRAPHIC_TOP
ou
IDEOGRAPHIC_BOTTOM
doit être dominante.
La propriété
baselineShift
déplace la ligne de base selon un nombre de pixels défini sur l’axe y. Dans un texte normal (aucune rotation), une valeur positive déplace la ligne de base vers le bas et une valeur négative la déplace vers le haut.
Casse typographique
La propriété
TypographicCase
de l’objet
ElementFormat
spécifie la casse du texte : majuscule, minuscule ou petites capitales.
var ef_Upper:ElementFormat = new ElementFormat();
ef_Upper.typographicCase = TypographicCase.UPPERCASE;
var ef_SmallCaps:ElementFormat = new ElementFormat();
ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS;
Rotation du texte
Vous pouvez appliquer une rotation au bloc de texte ou aux glyphes d’un segment de texte par incréments de 90°. La classe TextRotation définit les constantes suivantes pour définir la rotation du bloc de texte et des glyphes :
Constante
|
Valeur
|
Description
|
AUTO
|
“auto”
|
Spécifie une rotation vers la gauche de 90 degrés. Généralement utilisée avec un texte asiatique vertical pour faire pivoter uniquement les glyphes auxquelles il est nécessaire d’appliquer une rotation.
|
ROTATE_0
|
“rotate_0”
|
Spécifie aucune rotation.
|
ROTATE_180
|
“rotate_180”
|
Spécifie une rotation de 180 degrés.
|
ROTATE_270
|
“rotate_270”
|
Spécifie une rotation de 270 degrés.
|
ROTATE_90
|
“rotate_90”
|
Spécifie une rotation vers la droite de 90 degrés.
|
Pour appliquer une rotation aux lignes d’un texte, définissez tout d’abord la propriété
TextBlock.lineRotation
avant d’appeler la méthode
TextBlock.createTextLine()
pour créer la ligne de texte.
Pour appliquer une rotation aux glyphes dans un bloc de texte ou un segment, définissez la propriété
ElementFormat.textRotation
sur le nombre de degrés de rotation des glyphes souhaité. Une glyphe est la forme qui constitue un caractère, ou une partie d’un caractère qui consiste en plusieurs glyphes. La lettre « a » et le point sur un « i », par exemple, sont des glyphes.
La rotation des glyphes est importante dans certaines langues asiatiques, notamment si vous souhaitez appliquer une rotation verticale aux lignes, mais ne pas appliquer de rotation aux caractères dans les lignes. Pour plus d’informations sur la rotation du texte asiatique, voir
Justification du texte asiatique
.
Voici un exemple de rotation du texte et des glyphes qu’il contient dans un texte asiatique : Cet exemple utilise également une police japonaise :
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);
}
}
}
Verrouillage et clonage d’un objet ElementFormat
Lorsqu’un objet
ElementFormat
est affecté à un type de
ContentElement
, sa propriété
locked
est automatiquement définie sur
true
. Toute tentative de modification d’un objet
ElementFormat
verrouillé renvoie une erreur
IllegalOperationError
. La meilleure pratique consiste à définir complètement ce type d’objet avant de l’affecter à l’occurrence de
TextElement
.
Si vous souhaitez modifier une occurrence de
ElementFormat
existante, vous devez tout d’abord vérifier sa propriété
locked
. Si elle est définie sur
true
, utilisez la méthode
clone()
pour créer une copie déverrouillée de l’objet. Vous pouvez modifier les propriétés de cet objet déverrouillé, puis l’affecter à l’occurrence de
TextElement
. Toute nouvelle ligne créée à partir de cet objet adopte la nouvelle mise en forme. Les lignes précédentes créées à partir de cet objet et utilisant l’ancienne mise en forme ne sont pas modifiées.
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);
}
}
}
|
|
|