공부/developeGuide-Flex help

[Flex help] Using Events - About keyboard events

알 수 없는 사용자 2010. 3. 19. 11:23


이반적으로 어플리케이션에서 어떤 액션의 행위나 키의 종류들 또는 단순한 키에 반응하기위한 이벤트 이다.  예를 들어, Control + q 를 누르면 어플리케이션이 멈추는 것도 이에 해당한다. 플래시 플레이어가 잠재적으로 동작하는 시스템으로 부터 키 조함에 대한 기본적인 기능을 서포트하기 때문에 커스텀 액션 수행을 위해 키조합이나 오버라이드를 할 수 있다.



Handling keyboard events

key presses 를 처리하는 일반적인 방법은 어플리케이션에 KeyboardEvent.KEY_DOWN 혹은 KeyboardEvent.KEY_UP 이벤트에 대한 리스너를 만드는 것이다. 어플리케이션의 리스너들은 포커스가 어디에 있는지 (포커스가 브라우저 박이나 브라우저 컨트롤에 있는것이 아닌 어플리케이션에 있는 것) 에대해 클릭된 키의 모든 시간을 보내준다.

<?xml version="1.0"?>
<!-- events/TrapAllKeys.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();">
    <mx:Script><![CDATA[
        private function initApp():void {
            application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
        }

        private function keyHandler(event:KeyboardEvent):void {
            t1.text = event.keyCode + "/" + event.charCode;
        }
    ]]></mx:Script>

    <mx:TextInput id="myTextInput"/>
   
    <mx:Text id="t1"/>

</mx:Application>





Understanding the keyCode and charCode properties

keyCode 프로퍼티는 키보드의 키의 값과 같은 숫자 값이다.
charCode 프로퍼티는 현재 캐릭터셋(디폴트는 ASCII 를 지원하는 UTF-8)에서 그키의 숫자 값이다.

음..
keyCode는 누른값..f누르면 f 는 70
charCode는 누른값의 대문자?? ..f누르면 F 는 102   (shift +f)와는 의미가 다름..
그러나..숫자 1과 !의 값은같다.

<?xml version="1.0"?>
<!-- charts/ShowCharAndKeyCodes.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
  <mx:Script><![CDATA[
     import flash.events.KeyboardEvent;

     private function init():void {
        ti1.setFocus();
        this.addEventListener(KeyboardEvent.KEY_DOWN, trapKeys);
     }
           
     private function trapKeys(e:KeyboardEvent):void {
        ta1.text = String(e.toString());
       
        l1.text = numToChar(e.charCode) + " (" + String(e.charCode) + ")";
        l2.text = numToChar(e.keyCode) + " (" + String(e.keyCode) + ")";
     }
   
    private function numToChar(num:int):String {
        if (num > 47 && num < 58) {
            var strNums:String = "0123456789";
            return strNums.charAt(num - 48);
        } else if (num > 64 && num < 91) {
            var strCaps:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            return strCaps.charAt(num - 65);
        } else if (num > 96 && num < 123) {
            var strLow:String = "abcdefghijklmnopqrstuvwxyz";
            return strLow.charAt(num - 97);
        } else {
            return num.toString();
        }
    }       
  ]]></mx:Script>

  <mx:TextInput width="50%" id="ti1"/>
 
  <mx:Canvas id="mainCanvas" width="100%" height="100%">
     <mx:Form>
        <mx:FormItem label="Char (Code)">
           <mx:Label id="l1"/>
        </mx:FormItem>
        <mx:FormItem label="Key (Code)">
           <mx:Label id="l2"/>
        </mx:FormItem>
        <mx:FormItem label="Key Event">
           <mx:TextArea id="ta1" width="500" height="200" editable="false"/>
        </mx:FormItem>
     </mx:Form>
  </mx:Canvas>     
               
</mx:Application>

결과화면캡쳐.








[플렉스 help 영문 정리]
원본 : http://livedocs.adobe.com/flex/3/html/events_11.html#254464