Introduction
Pour des raisons de sécurité, une application Flex qui tourne dans Flash Player 9 ne peut accéder au presse-papier. En effet, l’accès à ce dernier pourrait permettre à une application de récupérer des informations auxquelles elle ne devrait pas avoir droit. Car en archivant les données qui transitent par le presse-papier, il serait possible de récupérer des données sensibles (mot de passe, informations privées, etc).
Problématique
Pouvoir récupérer le contenu de presse-papier et le manipuler avant de l’afficher dans un champ de saisie par exemple du genre TextInput ou TextArea.
Voir notre solution.
Solution
Les composants de saisie en Flex diffusent un événement textInput quand l’utilisateur saisit, supprime ou colle un texte dans le composant visuel.
Pour savoir si la raison qui provoque la diffusion de l’événement textInput est le fait de coller un texte dans le composant de saisie, il est nécessaire de capter les 2 événements keyDown et keyUp pour vérifier si les touches Ctrl et V étaient appuyées ou relâchées.
En résumé, si les touches Ctrl et V etaient appuyées avant de capter l’événement textInput, nous sommes bien dans le cas où l’utilisateur est entrain de coller un texte dans un composant de saisie.
Une fois que nous avons vérifié que nous sommes dans le cas où un utilisateur est en train de coller un texte dans un composant de saisie. Il suffit de capter l’événement change pour manipuler le texte avant de l’afficher.
Ce qui donne en Flex (voir ci-dessous).
Code
<![CDATA[
private var isCtrl:Boolean = false;
private var isPaste:Boolean = false;
// Vérifier si la touche Ctrl et la touche "V" sont enfoncées
private function onKeyDown(event:KeyboardEvent):void
{
if(event.ctrlKey && event.keyCode == 17)
{
isCtrl = true;
}
}
// Vérifier si la touche Ctrl etait relachée
private function onKeyUp(event:KeyboardEvent):void
{
if(event.keyCode == 17)
{
isCtrl = false;
}
}
// Si cet événement est dispatché, que les touches "Ctrl + V" sont enfoncées, alors il s'agit d'une action "Coller" (Paste)
private function onPaste(event:TextEvent):void
{
if(isCtrl)
isPaste = true;
}
// Manipuler le texte affiché si c'est une action "Coller"
private function onChange():void
{
if(isPaste)
{
isPaste = false;
txtInput.text = "This is a formatted text: "+ txtInput.text;
}
}
]]>



Bonjour,
Avez vous une solution pour capter l’évènement d’un textInput lorsque la valeur de celui-ci est automatiquement initialisé, genre par une popup ??
Merci !
Nicolas
Bonjour Nicolas,
Je ne pense pas qu’il y ait un événement qui soit déclenché lorsque l’on change la valeur de TextInput programmatiquement comme par exemple : txtInput.txt = “Hello World”.
Ce que vous pouvez faire, c’est déclencher un événement customisé pour envoyer une notification.
Par exemple : dispatchEvent(new Event(’Text_Input_Changed’)).
Et capter cet événement au bon endroit.
Fadi