simojava
Messages postés5Date d'inscriptionjeudi 4 mai 2006StatutMembreDernière intervention 9 août 2006
-
2 août 2006 à 03:34
Gyome314
Messages postés125Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention22 janvier 2009
-
3 août 2006 à 09:03
Bonjour,
Je voudrais faire une action sur une partie d'un TextField définie par Selection.getBeginIndex() et Selection.getEndIndex() et nonsur le texte en entier. Et ce dans le cadre de la réalisation d'un éediteur de texte en ActionScript.
Le probleme qui se pose est comme suit: Dès que j'appuie sur mon bouton la selection perd le focus et l'action ne se fait pas du coup.
J'ai essayé de restaurer la selection, de récuperer le TextFormat(), et de donner le focus à la sélection... mais en vain. Je m'y prend peut être très mal...
Voici un exemple de ce que j'utilise comme code: j'ai un TextField txtfld contenu dans un MovieClip vide mc et j'ai un bouton boldButton.
mc.createTextField("txtfld", 100, 150, 20, 50, 100);
mc.txtfld.type = "input";
mc.txtfld.border = true;
mc.txtfld.selectable = true;
mc.txtfld.wordWrap = false;
mc.txtfld.autoSize = true;
mc.txtfld.text = "Aidez-moi SVP";
formatCourant = new TextFormat();
formatCourant.bold=false;
// le listner qui observera la sourie
var MyListner:Object = new Object();
MyListner.onMouseUp = function() {
// recuperer le string qui a le focus
MySelection = Selection.getFocus(); if (MySelection "txtfld") { // j'ai aussi essayé if (eval(MySelection) mc.txtfld)
// recuperer les indices de la selection
beg = Selection.getBeginIndex();
end = Selection.getEndIndex();
}
Mouse.addListener(MyListner);
};
// l'appuie sur le bouton nommé "boldButton" devrait mettre en gras la partie sélectionnée avec la sourie
// c'est à ce moment là que la dite séelection perd de focus et l'action ne se fait pas du coup
boldButton.onRelease = function() {
// On restaure le focus en le donnant au textField (là j'ai un doute sur comment je m'y prend)
Selection.setFocus("txtfld");
// Recuperer les indices
Selection.setSelection(beg, end);
formatCourant = mc.txtfld.getTextFormat(beg, end);
// changer le TextFormat
formatCourant.bold = !formatCourant.bold;
// Appliquer le format à la sélection
mc.txtfld.setTextFormat(0, mc.txtfld.length, formatCourant);
};
En espérant que j'ai bien expliqué mon problème, j'implore votre bienveillance pour m'aider à voir ce ke je ne vois pas encore
Gyome314
Messages postés125Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention22 janvier 2009 2 août 2006 à 10:09
Au premier coup d'oeil, je vois plusieurs erreures dans ton script :
1) ton Mouse.addListener(MyListner); n'est pas au bon endroit, il est dans ta fonction onMouseUp(), il doit se situé après !
2) lorsque tu cliques sur ton bouton, ce n'est pas l'action du bouton qui s'effectue, mais c'est encore ta fonction onMouseUp() qui doit prendre le dessus, puisqu'elle "phagocyte" toute les actions de "clic" de l'animation...
Je n'ai pas LA solution en tête, mais j'ai déjà fait un traitement de texte dans ce genre... je t'envois de infos complémentaires si je le retrouve (mais c'était il y a longtemps)
Essaies de repensez ton script sans utiliser de MouseListener, sinon, tu rend inactif tous tes boutons...
Gyome314
Messages postés125Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention22 janvier 2009 2 août 2006 à 10:39
J'ai retrouvé une solution qui marche est qui simplifie de beaucoup le code :
mc.createTextField("txtfld", 100, 150, 20, 50, 100);
mc.txtfld.type = "input";
mc.txtfld.border = true;
mc.txtfld.selectable = true;
mc.txtfld.wordWrap = false;
mc.txtfld.autoSize = true;
mc.txtfld.text = "Aidez-moi SVP";
formatCourant = new TextFormat();
formatCourant.bold=false;
// Variable de début et fin de la sélection
var beg:Number;
var end:Number;
boldButton.onRollOver = function() {
// on sauvegarde les indice de sélection avant de cliquer sur le bouton
beg = Selection.getBeginIndex();
end = Selection.getEndIndex();
}