2011-01-03 2 views
0

Bonjour je me demande comment je peux créer un rectangle dynamique contenant du texte, le texte est dynamique, donc le rectangle doit s'adapter à la longueur du texte. Des idées sur la façon d'aborder cela?créer un rectangle dynamique

+0

Est-ce un bloc de texte avec wordwrap ou une seule ligne de texte? – Zevan

Répondre

0

ici est une base pour le texte d'une seule ligne:

import flash.display.Sprite; 
import flash.text.TextField; 

var rectClip:Sprite = new Sprite(); 

var rect:Sprite = new Sprite; 
rect.graphics.beginFill(0xff0000, 1); 
rect.graphics.drawRect(0, 0, 100, 100); 
rect.graphics.endFill(); 

var tf:TextField = new TextField(); 
tf.autoSize = "left"; 
tf.text = "Lorem ipsum dolor sit amet..."; 

addChild(rectClip); 
rectClip.addChild(rect); 
rectClip.addChild(tf); 

rect.width = tf.textWidth + 12; 
rect.height = tf.textHeight + 12; 
tf.x = Math.round(rect.width/2 - tf.width/2); 
tf.y = Math.round(rect.height/2 - tf.height/2); 

Rob

0

Une autre façon si vous voulez dessiner votre rectangle en Flash au lieu de actionscript (bien que la manière ci-dessus peut-être plus utile) .

Créez une couche avec un rectangle.

Faites du rectangle une sorte de graphique ou d'image-objet et définissez-le sur une mise à l'échelle à 9 découpes. De cette façon, le rectangle échelle correctement avec la zone de texte (bon si c'est un rectangle arrondi)

Vous pouvez aussi choisir Linkage pour le rectangle et lui donner un nom de classe (par exemple, « Contexte »)

public var textBackground:Background; // can make public or private depending if you leave it on the stage or generate it 
private var myTextField:TextField; 

Ensuite, ont deux fonctions:

private function createTextField():void 
{ 
// create your textfield here using actionscript 
myTextField = new TextField(); 
// customize your textfield 
} 

private function createTextBackground():void 
{ 
     textBackground = new Background; 
     textBackground.height = myTextField.height + 20; 
} 

Puis:

createTextField(); 
createTextBackground(); 
addChild(textBackground); 
addChild(myTextField); 

je change habituellement h huit en fonction du texte et définissez la largeur à une largeur fixe et définissez mon positionnement comme je l'aime.

0

Si TextField est multiligne, vous devez définir une largeur fixe, vous pouvez ensuite déterminer la hauteur TextField après son formatage.

private var format:TextFormat = new TextFormat(); 
    private var textWidth:int = 300; 
    private var hPadding:int = 10; 
    private var vPadding:int = 10; 
    private var boxColor:uint = 0x990000; 

    private function init():void 
    { 
     var tf:TextField = getTextField("Your text..........etc..."); 
     tf.x = hPadding; 
     tf.y = vPadding; 

     var rectWidth:int = textWidth + (hPadding * 2); 
     var rectHeight:int = tf.textHeight + (vPadding * 2); 

     var container:Sprite = getTextContainer(rectWidth , rectHeight); 
     container.addChild(tf); 

    } 

    private function getTextField(text:String):TextField 
    { 
     var tf:TextField = new TextField(); 
     tf.defaultTextFormat = format; 
     tf.autoSize = TextFieldAutoSize.LEFT; 
     tf.multiline = true; 
     tf.width = textWidth; 
     tf.text = text; 
     // etc... 

     return tf; 
    } 

    private function getTextContainer(width:int , height:int):Sprite 
    { 
     var sp:Sprite = new Sprite(); 

     with(sp.graphics) 
     { 
      beginFill(boxColor); 
      drawRect(0 , 0 , width , height); 
      endFill(); 
     } 

     return sp; 
    } 
Questions connexes