2010-04-07 2 views
1

내 응용 프로그램에서 keydown 이벤트를 전역 적으로 처리하려고하므로 표시 목록의 최상위 DisplayObject에 이벤트 처리기가 추가되었습니다. 그러나 커서 포커스가 텍스트 상자 또는 데이터 그리드 등에 있지 않으면 이벤트가 실행되지 않는 것처럼 보입니다.Flex Catch Keydown

응용 프로그램에서 키 누름을 전역으로 처리하도록하려면 어떻게해야합니까?

답변

1

stage.addEventListener(...)?

+0

맞아요.하지만이 이벤트 리스너를 만들 때 의문점이 있습니다. 문제를 검색하면 FlexEvent.APPLICATION_COMPLETE 중에 이벤트 리스너를 추가하는 것이 권장되지만 해당 이벤트는 실행되지 않습니다. –

0

먼저 flex 응용 프로그램이 포커스를 얻을 때까지 키 입력을 감지하지 않습니다. 시작시 응용 프로그램에 초점을 설정할 js 스크립트를 호출하여 자동으로 수행 할 수 있습니다.

일단 완료되면 systemManager에 키 수신기를 추가 할 것을 권장합니다. 그렇게하면 전 세계적으로 keydown 이벤트를 처리 할 수 ​​있습니다.

+0

AC_FL_RunContent에서 자동으로 포커스를 설정하지 않습니까? –

1

응답에서 영업 이익의 코멘트 위, 여기, 즉 응용 프로그램의 creationComplete 경우에, 올바르게를 연결하는 방법은 다음과 같습니다

<?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> 
0
ExternalInterface.call('function browserFocus(){document.getElementById(\'APPLICATION_NAME_HERE\').focus();}'); 

이는 IE와 오페라와 함께 작동합니다.