Adapter automatiquement la taille de police selon les dimensions d'un champ texte (textfield)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 308 fois - Téléchargée 16 fois

Contenu du snippet

Cette fonction permet de créer un champ texte dynamique en renseignant les coordonnées, ainsi que le texte à y insérer : le plus c'est que le texte prend automatiquement la taille la plus grosse pour la taille du champ donnée :)

Source / Exemple :


function creerChamp(nomTxt,texte,profondeur,largeur,hauteur,coY,coX){

//Initialisation taille police
police = 1;

//Création du champ
this.createTextField(''+nomTxt+'', profondeur, coY, coX, 1, 1);

//On lui attribue quelques propriétés
//trace(this[nomTxt]);
this[nomTxt].multiline = false;
this[nomTxt].wordWrap = false;
this[nomTxt].border = false;
this[nomTxt].selectable = false;

//On crée un format
monFormat = new TextFormat();
monFormat.size = police;
monFormat.color = 0x000000;
monFormat.font = 'arial';
monFormat.align = 'center';
//On remplis le champ de hauteur 1px et largeur 1px par le texte en police taille 1
this[nomTxt].text = texte;
this[nomTxt].setTextFormat(monFormat);

//On met la variable de condition a false
ok = false;

//La boucle augmente la taille de la police tant que la hauteur et la largeur ne sont pas dépassées
while(this[nomTxt]._width<largeur and this[nomTxt]._height<hauteur and ok != true){
	
	// On save a chaque tour les largeur et hauteur du texte
	saveH = this[nomTxt].textHeight;
	saveL = this[nomTxt].textWidth;
	
	//On incrémente de 1 la taille de police
	monFormat.size = police++;
	
	//On applique la police = le texte s'agrandit
	this[nomTxt].setTextFormat(monFormat);
	
	//On donne au champ texte les dimensions du texte
	this[nomTxt]._width = this[nomTxt].textWidth;
	this[nomTxt]._height = this[nomTxt].textHeight;
		
	//A la fin de chaque tour on vérifie si les valeurs max ne sont pas dépassées
	if(this[nomTxt]._width >= largeur){
		
		//Si oui on reviens a la l'état du dernier passage et on stop la boucle 
		//(on enleve -3 et non -1 a la police pour une marge d'erreur)
		
		this[nomTxt]._width = saveL;
		monFormat.size = police-3;
		this[nomTxt].setTextFormat(monFormat);
		ok = true
	}

}

//On remet bien les valeurs exacts (car parfois erreur de quelques px)
this[nomTxt]._width = largeur;
this[nomTxt]._height = hauteur;
}

//creerChamp(Nom du champ texte, texte a mettre, profondeur, largeur du champ, hauteur du champ, coo Y, coo X)
creerChamp('nom','yeahh',0, 250, 80, 0, 170);
creerChamp('nom2','yeeeeeeeeeeaaahh',10, 250, 80, 0, 110);

A voir également

Ajouter un commentaire

Commentaires

ths_otra
Messages postés
5
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
29 juin 2009
-
suggestion, mais pas encore tout à fait au point:

var largeur :Number = stage.stageWidth ;
var hauteur :Number= stage.stageHeight ;

var field :TextField = new TextField();
field.defaultTextFormat = new TextFormat("_sans",10,0xFF6600) ;
field.autoSize= "left" ;
field.text = "debut_ _fin" ;
field.wordWrap=true
field.height=200
field.width=200

field.antiAliasType = "advanced" ;
trace( field.width ) ;// Affiche 324
addChild(field) ;

var xScale :Number = largeur/(field.textWidth) ;
var yScale :Number = hauteur/(field.textHeight);
field.scaleX = xScale
field.scaleY = yScale ;

field.y= (hauteur-field.height)/2 ;
field.x= (largeur-field.width)/2 ;
trace( field.width ) ;
ths_otra
Messages postés
5
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
29 juin 2009
-
Salut, pas mal la correction de source ... par contre j'essaie de l'adapter à un champ multi-ligne (wordwrap=true ) et c'est pas évident. mission: Ecrire le texte le plus gros possible, centré sur le stage et multi-ligne !
top30
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010
-
Ben t'es pas doué !!!!

var pageWidth :Number = 500 ;
var pageHeight :Number= 200 ; // NOUVEAU !!!

var field :TextField = new TextField();
field.defaultTextFormat = new TextFormat("_sans",24,0xFF6600) ;
field.autoSize= "left" ;
field.text = "TOP30-HopeMultimedias.com" ;
field.antiAliasType = "advanced" ;
trace( field.width ) ;// Affiche 324
addChild(field) ;

var scale :Number = pageWidth/field.width ;field.scaleX field.scaleY scale ;

field.y= (pageHeight-field.height)/2 ; // ET VOILA !!!!
trace( field.width ) ;// Affiche 500.15
top30
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010
-
Cherche un peu non ?
bat_2504
Messages postés
3
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
14 janvier 2006
-
A ouai en effet c'est plus simple :p . Sinon vous auriez une idée de comment procéder pour que le texte soit aussi centré verticalement ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.