Probleme de selection de texte/ focus/Selection..

simojava Messages postés 5 Date d'inscription jeudi 4 mai 2006 Statut Membre Dernière intervention 9 août 2006 - 2 août 2006 à 03:34
Gyome314 Messages postés 125 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 22 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

Merci beucoup

4 réponses

Gyome314 Messages postés 125 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 22 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...

Bon courage, A+
Gyome
0
Gyome314 Messages postés 125 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 22 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();
}


boldButton.onRelease = function() {
 formatCourant = mc.txtfld.getTextFormat(beg,end);
 formatCourant.bold = !formatCourant.bold;
 mc.txtfld.setTextFormat(beg, end, formatCourant);
};

A+
bon courage
Gyome
0
simojava Messages postés 5 Date d'inscription jeudi 4 mai 2006 Statut Membre Dernière intervention 9 août 2006
2 août 2006 à 19:27
Merci beaucoup 195775 gyome314, ça marche parfaitement.
Il ya aussi cette solution:

MyListner = new Object();
MyListner.onMouseUp = function() {
       if (Selection.getFocus() = ="_level0.mc.txtfld") {
       beg = Selection.getBeginIndex();
       end = Selection.getEndIndex();
       }
}
boldButton.onRelease = function() {
       formatCourant = mc.txtfld.getTextFormat(beg,end);
       formatCourant.bold = !formatCourant.bold;
       mc.txtfld.setTextFormat(beg, end, formatCourant);
}
Mouse.addListener(MyListner);
};
0
Gyome314 Messages postés 125 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 22 janvier 2009
3 août 2006 à 09:03
Ce qui est bien avec Flash, c'est qu'il y a toujours une infinité de facons de faire... ;)


Bon courage pour la suite.


Gyome.
0
Rejoignez-nous