Fl.managers.FocusManager... pour composants persos

Résolu
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 27 janv. 2011 à 23:08
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 29 janv. 2011 à 15:56
Hello,

je suis en train de m'essayer à la gestion du focus en as3 sur des composants persos : boutons, champs textes, etc.
Pour commencer je teste sur un simple formulaire d'identification contenant 2 champs textes : "pseudo" et "mdp", ainsi qu'un bouton "valider".
Dans l'idée je souhaite que lorsqu'on clique sur le champ de texte de saisie "pseudo" le curseur de ce champ de saisie s'affiche, et si l'on clique sur le champ de saisie "mdp", le curseur du champ de saisie "mdp" s'affiche et celui du champ de saisie "pseudo" s'efface. Dans la logique si l'on clique sur le bouton "valider" j'aimerai que les curseurs des 2 champs "pseudo" et "mdp" disparaissent.
Pour faire simple mes champs de texte de saisie "pseudo" et "mdp" sont des clips qui contiennent chacun respectivement un clip "contour" qui dès lors que l'on clique s'affiche (comme les champs de saisie input en html en somme -> le fameux cadre bleu qui apparaît lors d'un clic sur le champ en question).
Bref, je parviens à des résultats mais ce n'est pas encore satisfaisant à 100% : j'ai défini des événements sur les clics sur chacun des objets et ça fonctionne, mais pour gérer le changement de focus lorsqu'on presse la touche tabulation ça coince.
Donc j'en appelle à vos idées pour la gestion de touche tabulation concernant la prise du focus.

Voici mon ébauche de code :
import flash.events.MouseEvent;
import fl.managers.FocusManager; 
import flash.display.InteractiveObject;

var fm:FocusManager = new FocusManager(this);

//définition de l'ordre des tabulations :
pseudo.pseudo.tabIndex = 1;
mdp.mdp.tabIndex = 2;
valid.tabIndex = 3;

valid.buttonMode=true;
valid.useHandCursor=true;

//je spécifie que les contours "bleus" des clips sont invisibles
pseudo.contour.visible = false;
mdp.contour.visible = false;

//j'initialise le focus sur le champ texte de saisie du clip "pseudo",
//"pseudo" étant le champ de texte de saisie -> "pseudo"(clip)."pseudo"(champ texte) :
fm.setFocus(pseudo.pseudo);

//j'attribue les événements sur le changement de focus :
pseudo.pseudo.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, FocusCH);
mdp.mdp.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, FocusCH);

//j'attribue les événements sur le clic :
pseudo.pseudo.addEventListener(MouseEvent.CLICK, FocSET);
mdp.mdp.addEventListener(MouseEvent.CLICK, FocSET);

//fonction FocSET : le contour bleu de l'objet cliqué s'affiche :
function FocSET(event:MouseEvent):void{
event.currentTarget.parent.contour.visible = true;
}

//fonction FocusCH : le contour bleu de l'objet précédemment cliqué disparait :
function FocusCH(fe:FocusEvent):void{
fe.currentTarget.parent.contour.visible = false;
}


Soit : pour la gestion du clic ça tourne à peu près, mais ce que j'aimerai parvenir à faire c'est faire disparaitre le curseur du texte lorsque le focus change d'objet et dans le même temps pouvoir switcher le focus d'un objet à l'autre via la touche tabulation (ce qui n'est pas fonctionnel actuellement).

Merci d'avance pour vos éclaircissements sur la question ,

A plus ,

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;

1 réponse

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
29 janv. 2011 à 15:56
Bon et bien je m'auto-réponds :

après avoir fouiné sur le net j'ai décidé de me passer du FocusManager, pour le coup j'ai défini des événements lors des clics sur mes objets, et sur l'appui de la touche TAB, afin de faire apparaître le contour bleu "maison" que j'ai créé. En définissant l'ordre d'apparition via tabIndex je parviens donc à "switcher" entre les éléments et ce en cohérence que l'on appuie sur la touche TAB ou que l'on clique sur l'un des éléments.

Le code :
stage.stageFocusRect = false;

valid.buttonMode=true;
valid.useHandCursor=true;

pseudo.contour.visible = false;
mdp.contour.visible = false;
valid.contour.visible = false;

pseudo.pseudo.tabIndex = 1;
mdp.mdp.tabIndex = 2;
valid.valid.tabIndex = 3;
var PISTE:Number = 1;

pseudo.pseudo.addEventListener(MouseEvent.CLICK, FocSET);
mdp.mdp.addEventListener(MouseEvent.CLICK, FocSET);
valid.valid.addEventListener(MouseEvent.CLICK, FocSET);

stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);

function FocSET(event:MouseEvent):void{
event.currentTarget.parent.contour.visible = true;
PISTE = event.currentTarget.tabIndex;
if(PISTE == 1){
mdp.contour.visible = false;
valid.contour.visible = false;
PISTE = 2;
}else if(PISTE == 2){
pseudo.contour.visible = false;
valid.contour.visible = false;
PISTE = 3;
}else if(PISTE == 3){
pseudo.contour.visible = false;
mdp.contour.visible = false;
PISTE = 1;
}
}

function reportKeyDown(event:KeyboardEvent):void{
if (event.charCode == Keyboard.TAB){
if(PISTE == 1){
pseudo.contour.visible = true;
mdp.contour.visible = false;
valid.contour.visible = false;
PISTE = 2;
}else if(PISTE == 2){
mdp.contour.visible = true;
pseudo.contour.visible = false;
valid.contour.visible = false;
PISTE = 3;
}else if(PISTE == 3){
valid.contour.visible = true;
pseudo.contour.visible = false;
mdp.contour.visible = false;
PISTE = 1;
}
}
}


Voilà, pour ceux qui rencontreraient le même problème .

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
3
Rejoignez-nous