2009-05-27 16 views
1

Ich habe eine kleine Anwendung im Flex, in dem ich 2 Leinwände definiert habe. Auf einem von ihnen habe ich Kontrollen und die andere verwendet wird etwas und keine Kontrollen hinzugefügt werden, zeichnen: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"/> 

Ich füge eine keydown Ereignis an die Anwendung behandelt, aber es wird nur dann ausgelöst, nachdem ich mit der Maus klicken Sie auf der erste Canvas-Bereich (der Bereich, in dem die Steuerelemente hinzugefügt wurden). Ansonsten wird das Ereignis nicht ausgelöst, wenn Tasten gedrückt werden.

Ich habe mehrere Dinge ausprobiert: Fokus auf die zweite Leinwand setzen, den Keydown-Handler zur Anwendung (this), Bühne, Leinwand hinzufügen ... Leider habe ich keine Lösung gefunden, um Keydown auszulösen, egal wo der Fokus liegt.

Antwort

0

Das erste Problem, das Sie beschreiben (vor dem Absetzen von KeyboardEvents müssen Sie mit der Maus klicken), liegt wahrscheinlich daran, dass der Browser nicht den Schwerpunkt auf die Flex-Anwendung selbst legt. Sie können Javascript im HTML-Wrapper verwenden, um programmatisch den Fokus auf die Flex-App für das Ereignis "onLoad" des Elements "body" zu legen. Ich weiß sicher, dass das in Firefox funktioniert und ich glaube, dass es auch im IE funktioniert. Ich werde versuchen, den relevanten Javascript-Code auszugraben.

Soweit das zweite Problem, haben Sie versucht, einen Event-Listener zu Application.application zum Abfangen aller KeyboardEvents?

1

Dies ist für 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>