Documentation Flash CS3 |
|||
| Programmation avec ActionScript 3.0 > Utilisation de texte > Exemple : formatage du texte dans le style « journal » > Répartition du texte sur plusieurs colonnes | |||
La classe MultiColumnTextField répartit le texte entre plusieurs objets TextField qui sont organisés comme des colonnes de texte sur une page de journal.
Le constructeur de MultiColumnTextField() crée d'abord un tableau d'objets TextField, un pour chaque colonne :
for (var i:int = 0; i < cols; i++)
{
var field:TextField = new TextField();
field.autoSize = TextFieldAutoSize.NONE;
field.wordWrap = true;
field.styleSheet = this.styleSheet;
this.fieldArray.push(field);
this.addChild(field);
}
Chaque objet TextField est ajouté au tableau et à la liste d'affichage à l'aide de la méthode addChild().
Si la propriété text ou styleSheet de l'objet StoryLayout change, la méthode layoutColumns() est appelée pour réafficher le texte. La méthode layoutColumns() appelle la méthode getOptimalHeight() (ci-dessous) pour déterminer la hauteur correcte en pixels nécessaire pour adapter tout le texte en fonction de la largeur disponible.
public function getOptimalHeight(str:String):int
{
if (fieldArray.length == 0 || str == "" || str == null)
{
return this.preferredHeight;
}
else
{
var colWidth:int = Math.floor( (this.preferredWidth -
((this.numColumns - 1) * gutter)) / this.numColumns);
var field:TextField = fieldArray[0] as TextField;
field.width = colWidth;
field.htmlText = str;
var linesPerCol:int = Math.ceil(field.numLines / this.numColumns);
var metrics:TextLineMetrics = field.getLineMetrics(0);
var prefHeight:int = linesPerCol * metrics.height;
return prefHeight + 4;
}
}
La méthode getOptimalHeight() calcule d'abord la largeur de chaque colonne. Elle définit ensuite la propriété htmlText du premier objet TextField du tableau. La méthode getOptimalHeight() utilise ce premier objet TextField pour connaître le nombre total de lignes renvoyées à la ligne, et en déduit donc le nombre de lignes optimal pour chaque colonne. Elle appelle ensuite la méthode TextField.getLineMetrics() pour obtenir un objet TextLineMetrics contenant des informations sur la taille du texte de la première ligne. La propriété TextLineMetrics.height représente la hauteur totale (en pixels) d'une ligne de texte, avec les mesures ascendantes, descendantes et l'interligne. La hauteur optimale de l'objet MultiColumnTextField est donc la hauteur de ligne multipliée par le nombre de lignes par colonne, plus 4 pour prendre en compte la bordure de 2 pixels en haut et en bas de l'objet TextField.
Voici le code complet de la méthode layoutColumns() :
public function layoutColumns():void
{
if (this._text == "" || this._text == null)
{
return;
}
if (this.fitToText)
{
this.preferredHeight = this.getOptimalHeight(this._text);
}
var colWidth:int = Math.floor( (this.preferredWidth -
((numColumns - 1) * gutter)) / numColumns);
var field:TextField;
var remainder:String = this._text;
var fieldText:String = "";
for (var i:int = 0; i < fieldArray.length; i++)
{
field = this.fieldArray[i] as TextField;
field.width = colWidth;
field.height = this.preferredHeight;
field.x = i * (colWidth + gutter);
field.y = 0;
field.htmlText = "<p>" + remainder + "</p>";
remainder = "";
fieldText = "";
var linesRemaining:int = field.numLines;
var linesVisible:int = field.numLines - field.maxScrollV + 1;
for (var j:int = 0; j < linesRemaining; j++)
{
if (j < linesVisible)
{
fieldText += field.getLineText(j);
}
else
{
remainder += field.getLineText(j);
}
}
field.htmlText = "<p>" + fieldText + "</p>";
}
}
Lorsque la propriété preferredHeight a été définie par un appel à la méthode getOptimalHeight, la méthode layoutColumns() parcourt les objets TextField et définit la hauteur de chacun avec la valeur preferredHeight. La méthode layoutColumns() distribue ensuite le nombre de lignes de texte adapté à chaque champ, de sorte qu'aucun défilement ne se produise dans l'un d'eux et que le texte de chaque champ enchaîne sur celui du champ précédent.
Flash CS3
M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire
Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000240.html