1 votes

Flex Catch Keydown

Je veux gérer l'événement "keydown" de manière globale dans mon application et j'ai donc ajouté le gestionnaire d'événement au DisplayObject le plus haut dans la liste d'affichage. Cependant, l'événement ne semble pas se déclencher si le curseur ne se trouve pas sur une zone de texte ou une grille de données, par exemple.

Comment puis-je faire en sorte que les pressions sur les touches soient gérées globalement par l'application ?

1voto

Theo.T Points 4739

stage.addEventListener(...) ?

1voto

Mike Chamberlain Points 5325

En réponse au commentaire de l'OP ci-dessus, voici comment le brancher correctement, à savoir dans l'application creationComplete événement :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="initApp();">

    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.managers.SystemManager;

            public function initApp():void {
                systemManager.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown)
            }

            public function onKeyDown(event:KeyboardEvent):void {
                pressedKey.text = event.charCode.toString();
            }           
        ]]>
    </fx:Script>

    <mx:Label x="486" y="63" text="You pressed: "/>
    <mx:Label id="pressedKey" x="577" y="58" width="122" text=""/>
</s:Application>

0voto

Florian F Points 6681

Tout d'abord, vous ne détecterez aucune frappe de touche tant que votre application Flex n'aura pas obtenu le focus. Vous pouvez le faire automatiquement en appelant un js script au démarrage qui mettra le focus sur l'application

Une fois cela fait, je vous recommande d'ajouter votre écouteur de touches sur le systemManager. Cela vous permettra de gérer l'événement keydown de manière globale.

0voto

Japi Points 542
ExternalInterface.call('function browserFocus(){document.getElementById(\'APPLICATION_NAME_HERE\').focus();}');

Cela ne fonctionne qu'avec IE et Opera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X