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]
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]
hello
c'est quoi ?![]()
Sinon un justify... tu peux sur un champ de texte dynamique uniquement dans Flash 8 en tapant :C:\Documents and Settings\Install\Desktop\jusitify.gif
Si tu es pas dans Flash8 tu peux aller voir ici :
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
http://www.quasimondo.com/archives/000526.php#526
EKA+![]()
un grand merci pour vous mais j'utilise encore le flash mx 2004
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)
Hello
C'est le but non ?Tu sais ce que c'est qu'un champ de texte dynamique ? (TextField) ?
EKA+![]()
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
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+![]()
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 :
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.
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; } }
Si vous m'avez une solution je serait gratitueux.
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
![]()
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 :
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
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 ; } }
Bon j'ai pas testé le code mais cela devrait le 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() ; }
EKA+![]()
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 !!!![]()
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+![]()
PS : j'ai pas vu le screenshot(j'oublie à chaque fois de te le dire lol)
Dans le site que vous avez fourni j'ai trouvé quelqu'un qui a partagé le code suivant :est ce qu'on peut l'adapter pour avoir le justify avec createTextField created textField
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; } };![]()
Un peu compliqué.. mais suffit de le tester ...
EKA+![]()
Partager