IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH MX2004] Justifier un textField créé dynamiquement


Sujet :

Flash

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 71
    Par défaut [FLASH MX2004] Justifier un textField créé dynamiquement
    Bonjour
    est ce qu'il y'a une manière de faire un justify pour un textField créé en runtime
    [img]C:\Documents and Settings\Install\Desktop\jusitify.gif[/img]
    :[/img]

  2. #2
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    hello

    c'est quoi ?
    C:\Documents and Settings\Install\Desktop\jusitify.gif
    Sinon un justify... tu peux sur un champ de texte dynamique uniquement dans Flash 8 en tapant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var format = new TextFormat() ;
    format.font = "arial" ;
    format.size = 10 ;
    format.align = "justify" ;
     
    field.setNewtTextFormat( format ) ;
    field.text = "... ton texte ...." ; 
    /// etc... voir le reste dans l'aide
    Si tu es pas dans Flash8 tu peux aller voir ici :
    http://www.quasimondo.com/archives/000526.php#526

    EKA+

  3. #3
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 71
    Par défaut
    un grand merci pour vous mais j'utilise encore le flash mx 2004

  4. #4
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Donc va voir la seconde solution de mon exemple

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 71
    Par défaut
    est ce que je peux utiliser cette solution en runtime? (Bon je vais essayer mais si vous avez une solution toute prete i will be grateful si vous me la fournissez)

  6. #6
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    C'est le but non ? Tu sais ce que c'est qu'un champ de texte dynamique ? (TextField) ?

    EKA+

  7. #7
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 71
    Par défaut
    Oui, je veux créer un champs de texte en runtime pour le mettre dans une infobulle qu'on doit pouvoir ajuster la hauteur selon la taille de ce champs de texte.
    j'ai créé la solution mais j'avais tjrs des prbs à avoir un texte si agréable que l'on souhaite, un autre problème est que flash fait un retour à la ligne si le dernier mot de la ligne ne peut pas etre affiché dans l'espace restant
    votre suggestion est chouette mais c'est pas ça exactement ce que je veux

  8. #8
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Depuis le début... je te pose une question et à mon avis il te manque un truc essentiel ... lire l'aide
    Dedans tu verras de quoi je te parle au dessus avec "TextField" .. les champs de textes dynamiques ont des tas de propriétés comme "autoSize" qui permet à ton champ de texte de prendre la taille de son contenu... Tu as aussi la classe TextFormat pour gérer les alignements etc...
    Pour créer dynamiquement un champ de texte tu peux utiliser MovieClip.createTextField etc... Pour le retour à la ligne de ton texte.. cela supprime avec TextField.wordWrap et TextField.multiline...
    Tout cela pour te dire de prendre le temps de lire l"aide de flash.. on doit tous passer par là et même un pro continue à la lire... surtout son dictionnaire actionscript
    EKA+

  9. #9
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 71
    Par défaut
    merci pour les conseils!
    c'est vrai que je ne suis pas un pro mais j'ai déja fait tous ce que vous avez décrit et ceci est le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    class reshapeInfobulle extends MovieClip {
    	private var Infob;
    	function reshapeInfobulle() {
    		//constructor
    	}
    	function main(Name, texte, IDepth, __x, __y, __width, __height) {
    		createInfobulle(Name, texte, IDepth, __x, __y, __width, __height);
    	}
    	function createInfobulle(Name, texte, IDepth, __x, __y, __width, __height) {
    		_root.application.attachMovie("mainInfobulleClip", Name, IDepth);
    		//trace("nom="+Name);
    		_root.application[Name].createTextField("infoText", IDepth, __x, __y, __width, __height);
    		//trace("myinfobulle= "+Name)
    		with (_root.application[Name].infoText) {
    			autoSize = true;
    			text = texte;
    			//border=true
    			multiline = true;
    			wordWrap = true;
    			selectable = false;
    			var myformat:TextFormat = new TextFormat();
    			myformat.font = "Trebuchet MS";
    			myformat.color = 0x6D5469;
    			myformat.size = 12;
    			setTextFormat(myformat);
    		}
    		reshapeInfob(Name);
    	}
    	function reshapeInfob(Name) {
    		_root.application[Name].infobMiddlePart._height = _root.application[Name].infoText._height-22;
    		trace("bgTextHeight="+_root.application[Name].infobMiddlePart._height);
    		trace("TextHeight="+_root.application[Name].infoText._height);
    		_root.application[Name].infobButtomPart._y = _root.application[Name].infobMiddlePart._y+_root.application[Name].infobMiddlePart._height;
    	}
    	function dragInfobulle(Name) {
    		_root.onEnterFrame = function() {
    			_root.application[Name]._y = _root.application._ymouse-((_root.application[Name].infobMiddlePart._height)-19);
    			_root.application[Name]._x = _root.application._xmouse;
    		};
    	}
    	function handleRelease(Name) {
    		_root.application[Name].removeMovieClip();
    		delete _root.onEnterFrame;
    	}
    }
    je m'excuse pour le dérangement, aussi le code est aussi très mal mis en forme, comme je vous ai décrit le problème est de justifier le champs de texte pour donner un look agréable.
    Si vous m'avez une solution je serait gratitueux.

  10. #10
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 71
    Par défaut
    et ici un screenShot pour "l'applicationnette" que je veux créer, pour que vous puissez avoir un aperçu direct sur mon problème ergonomique par excellence

  11. #11
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    1 -En général en AS2 ou AS1 d'ailleurs faut pas cibler le _root dans les classes... le jour où tu vas vouloir charger ton swf dans un autre.. ton applicatif ne marchera pas et il faudra tout changer dans ton code.. c'est pas bon

    Le mieux est de définir une référence vers la cible principal en créer une propriété publique dans ta classe .. exemple "target"

    2 - niveau de ton code .. il existe des conventions d'écriture qu'il est préférable de suivre quand on développe dans n'importe quel language, par exemple, c'est pas une obligation mais dans tous les languages de programmation tout le monde débute le nom d'une classe par une majuscule ! Et forcément tu as du remarquer que dans flash justement toutes les classes (MovieClip etc..) débutent par une majuscule, du coup faut en profiter pour faire pareil
    Je te conseille d'aller lire cet article à ce sujet : Convention d'écriture

    3 - Niveau de ton code .. ta classe n'a pas besoin d'hériter de MovieClip.

    4 - Je vais te coder une "correction" de ta classe... que j'ai pas testé juste pour te montrer ce qu'il serait pas mal de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    // permet d'utiliser MovieClip.addListener et MovieClip.removeListener
    import mx.transitions.OnEnterFrameBeacon ; 
     
    class InfoBulle {
     
     
    	// --- Constructor
     
    	public function InfoBulle(target:MovieClip) {
    		this.target = target ;
    	}
     
    	// ----o Init OnEnterFrameBeacon
     
    	// permet de mettre un onEnterFrame sur un objet qui n'hérite pas de MovieClip
    	static public var initBeacon = OnEnterFrameBeacon.init() ; 
     
    	// ----o Constant
     
    	static public var INFO_ID:String = "main_infoBulleulleClip" ;
     
    	// ----o Public Properties
     
    	public var bubble:MovieClip ;
    	public var target:MovieClip ;
    	public var field:TextField ;
     
    	// ----o Public Methods
     
    	public function main( name:String, depth:Number, texte:String, x:Number, y:Number, w:Number, h:Number):Void {
    		create (name, depth, texte, x, y, w, h ) ;
    	}
     
        public function create (name:String, depth:Number, texte:String, x:Number, y:Number, w:Number, h:Number):Void {
    		if (!target) throw new Error("InfoBulle :: create -> targetError") ;
    		bubble = target.attachMovie( INFO_ID , name , depth) ;
    		bubble.createTextField("field", 0, x, y, w, h) ;
    		field = bubble["field"] ;
    		field.setNewTextFormat( getInitFormat() ) ;
    		with (field) {
    			autoSize = true;
    			text = texte ;
    			multiline = true ;
    			wordWrap = true ;
    			selectable = false ;
    		}
    		refresh();
    	}
     
    	public function remove():Void {
    		bubble.removeMovieClip() ;
    	}
     
    	public function getInitFormat():TextFormat {
    		var f:TextFormat = new TextFormat() ;
    		f.font = "Trebuchet MS" ;
    		f.color = 0x6D5469 ;
    		f.size = 12 ;
    		return f ;
    	}
     
    	public function refresh():Void {
    		var middle = bubble._infoBulleMiddlePart ; // ??? c'est quoi le fond ?
    		middle._height = field._height - 22 ;
    		middle._y = middle._y + middle._height ;
    	}
     
     
    	public function startDrag() {
    		MovieClip.addListener(this) ; // active la méthode privée onEnterFrame
    	}
     
    	public function stopDrag():Void {
    		remove() ;
    		MovieClip.removeListener(this) ; // désactive la méthode privée onEnterFrame
    	}
     
    	// ----o Private Methods
     
    	private function onEnterFrame = function() {
    		bubble._y = target._ymouse - ( bubble._infoBulleMiddlePart._height - 19 ) ;
    		bubble._x = target._xmouse ;
    	}
     
    }
    et dans flash tu peux en gros faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var myBubble = new InfoBulle(this) ; // si je met le code sur la scène principale
     
    myButton.onRollOver = function () {
           myBubble.create( "bubble", 999, "coucou tu vas bien ?", 5, 5, 180, 18) ;
           myBubble.startDrag() ;
    }
    myButton.onRollOut = function () {
           myBubble.stopDrag() ;
    }
    Bon j'ai pas testé le code mais cela devrait le faire
    EKA+

  12. #12
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 71
    Par défaut
    Un strrrrrrrrrrrrrong merci pour vous pour ces conseils
    Je suis vraiment encore débutant en poo.
    mais j'aimerais savoir si vous avez vu le screenshot de l'application s'il ya une soluation dans notre vieillard 2004 pour la mauvaise mise en forme du textField créé par createTextField.
    la classe bien que très mal codée affiche quelque chose, mais le problème maintenant est de résoudre la mauvaise mise en forme du texte affiché dans l'infobulle
    j'excuse d'avantage pour le dérangement !!!

  13. #13
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Si tu fais un autoSize c'est bien .. mais ce qu'il faut c'est mettre ton texte en TextFormat.align = "center"... je pense que cela peut arranger les choses...
    EKA+

  14. #14
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    PS : j'ai pas vu le screenshot (j'oublie à chaque fois de te le dire lol)

  15. #15
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 71
    Par défaut
    Dans le site que vous avez fourni j'ai trouvé quelqu'un qui a partagé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     MovieClip.prototype.createJustifiedText = function(name, depth, x, y, width, text, format) {
        this.createEmptyMovieClip(name, depth);
        this[name].createTextField("tempCamp", 10000, 0, 300, 0, 0);
        this[name].tempCamp.setNewTextFormat(format);
        this[name].tempCamp.text = "lala";
        this[name].tempCamp.autoSize = true;
        this[name].tempCamp.embedFonts = true;
        var iniY = this[name].tempCamp._height;
        this[name].tempCamp.text += newline+"lala";
        var finY = this[name].tempCamp._height-iniY;
        this[name].tempCamp.removeTextField();
        var posX = 0;
        var posY = 0;
        var j = 0;
        var l = 0;
        var promedio = 0;
        this[name]._x = x;
        this[name]._y = y;
        var aSaltos = text.split(String.fromCharCode(13));
        for (var ij = 0; ij<aSaltos.length; ij++) {
            var aTexto = aSaltos[ij].split(" ");
            for (var i = 0; i<aTexto.length; i++) {
                l++;
                this[name].createTextField("campo"+l, l, posX, posY, 0, 0);
                this[name]["campo"+l].setNewTextFormat(format);
                this[name]["campo"+l].text = aTexto[i];
                this[name]["campo"+l].autosize = true;
                this[name]["campo"+l].embedfonts = true;
                this[name]["campo"+l].selectable = false;
                posx += this[name]["campo"+l]._width;
                aLinea[j] = "campo"+l;
                j++;
                if (posX>width) {
                    posY += finY;
                    posx -= this[name]["campo"+l]._width;
                    this[name]["campo"+l].removeTextField();
                    i--;
                    promedio = (width-posX)/(j-2);
                    for (k=1; k<aLinea.length; k++) {
                        this[name][aLinea[k]]._x += promedio*k;
                    }
                    aLinea = new Array();
                    j = 0;
                    posX = 0;
                }
            }
    	j=0;
            posX=0;
            posY+=finY;
        }
    };
    est ce qu'on peut l'adapter pour avoir le justify avec createTextField created textField

  16. #16
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Un peu compliqué.. mais suffit de le tester ...
    EKA+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FLASH MX2004] Taille d'une texte dynamique
    Par morgiane dans le forum Flash
    Réponses: 13
    Dernier message: 06/07/2006, 17h34
  2. [FLASH MX2004 PRO] Pile de clips dynamique
    Par guy2004 dans le forum Flash
    Réponses: 4
    Dernier message: 09/03/2006, 17h11
  3. Réponses: 5
    Dernier message: 14/01/2006, 20h30
  4. [FLASH MX2004] Variable de Textfield comme param
    Par sovitec dans le forum Flash
    Réponses: 5
    Dernier message: 09/01/2006, 12h11
  5. [FLASH MX2004] Pb d'affichage texte dynamique
    Par mohican13 dans le forum Flash
    Réponses: 6
    Dernier message: 01/02/2005, 09h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo