2009-05-27 12 views
1

J'ai une petite application en flex dans laquelle j'ai défini 2 toiles. Sur l'un d'entre eux j'ai ajouté des contrôles et l'autre est utilisé pour dessiner quelque chose et aucun contrôle sont ajoutés:keydown in flex Flex

<mx:Canvas x="0" y="80" width="100%" height="520%" id="Canvas1"/> 
<mx:Canvas x="0" y="0" width="100%" height="80" id="Canvas2"/> 

ajouter un événement keydown manipulé à l'application, mais il est déclenchée seulement après que je clique avec la souris sur le premier Canvas (celui où les contrôles ont été ajoutés). Sinon, l'événement n'est pas déclenché lorsque les touches sont enfoncées.

J'ai essayé plusieurs choses: mettre l'accent sur le second canevas, ajouter le gestionnaire de claviers à l'application, la scène, le canevas ... Malheureusement, je n'ai pas trouvé de solution pour déclencher le clavier, peu importe où l'accent est mis.

Répondre

0

Le premier problème que vous décrivez (le fait de devoir cliquer sur la souris avant l'envoi de KeyboardEvents) est probablement dû au fait que le navigateur ne se concentre pas sur l'application Flex elle-même. Vous pouvez utiliser JavaScript dans l'encapsuleur HTML pour que l'application Flex soit mise en évidence par programmation dans l'événement "onLoad" de l'élément "body". Je sais pour sûr que cela fonctionne dans Firefox et je crois que cela fonctionne bien dans IE. Je vais essayer de déterrer le code Javascript pertinent.

En ce qui concerne le second problème, avez-vous essayé d'ajouter un écouteur d'événement à Application.application pour intercepter tous les KeyboardEvents?

1

Ceci est pour flex 4.

<?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" 
      name="MyApp" 
      width="480" height="480" 
      creationComplete="init();"> 

<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<fx:Script> 
    <![CDATA[ 
     public function init():void 
     { 
      trace("init"); 
      this.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); 
     } 

     private function keyDown(event:KeyboardEvent):void 
     { 
      trace(event.charCode); 
     }  
</fx:Script></s:Application>