2009-03-27 9 views
1

Je travaille sur un jeu flash AS3 qui prend initialement une entrée d'un scanner de codes à barres. Les données analysées se présentent sous la forme d'une longue chaîne utilisant des onglets pour séparer les segments de données. Le scanner agit comme un clavier et entre la chaîne dans un champ de texte caché afin que je puisse saisir la chaîne et la séparer pour obtenir les données.Comment autoriser les caractères de tabulation dans un champ de texte dans Flash?

L'entrée et tout fonctionne très bien. Le problème que je rencontre est que lorsque le champ de texte reçoit un caractère de tabulation, au lieu d'insérer le caractère dans le champ de texte, il met en évidence ce qui est dans le champ de texte. Ensuite, le jeu de caractères suivant écrase ce qui était déjà dans le champ de texte.

Y a-t-il un moyen de contourner ce problème? Est-il possible de faire en sorte que le champ de texte accepte l'onglet en tant que caractère littéral? Je ne peux pas changer la façon dont le code à barres délimite les données dans la chaîne.

Merci pour toute aide que vous pouvez donner.

Répondre

1

(solution mise à jour)

C'est en effet preventabe. Vous pouvez l'arrêter avec le texte suivant (en supposant que le texte est le champ de texte).

Text.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, TextKeyFocusChange); 

private function TextKeyFocusChange(e:FocusEvent):void 
{ 
    e.preventDefault(); 

    var txt:TextField = TextField(e.currentTarget); 

    txt.appendText("\t"); 
    txt.setSelection(txt.length, txt.length); 
} 
+0

Cela fonctionne presque. Je suis incapable d'ajouter le caractère "\ t", mais je peux entrer la chaîne unique "? $". Le problème est maintenant que lorsque je .appendText() le curseur reste devant le texte ajouté. Le résultat est la chaîne de données suivie d'une série de? $. – user54331

+0

J'ai mis à jour ma solution. Je n'ai aucun problème avec \ t ici, il insère un char tab. –

+1

Si l'utilisateur a sélectionné une partie du texte, il ne l'écrasera pas. –

4

Ce qui suit permet à l'utilisateur de type un onglet partout dans le TextField

someTextField.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, TextKeyFocusChange); 
private function TextKeyFocusChange(e:FocusEvent):void 
{ 
    e.preventDefault();   
    var txt:TextField = TextField(e.currentTarget); 
    txt.replaceText(txt.caretIndex, txt.caretIndex, "\t"); 
    txt.setSelection(txt.caretIndex + 1, txt.caretIndex + 1); 
} 

Note (pas seulement la fin.): Cette solution est un peu plus lent que d'utiliser appendText et ne doit être utilisé que si Les onglets peuvent être entrés n'importe où dans le TextField, pas seulement la fin.

Questions connexes