2013-04-02 56 views
2

我目前正在開發和AIR應用程序爲我需要檢測命令鍵組合鍵,目前我根據文檔事件有這樣的事情在Mac上的Adobe AIR命令鍵

this.addEventListener(KeyboardEvent.KEY_UP, onKeyUp); 

protected function onKeyUp(event:KeyboardEvent):void 
{ 
    if(event.ctrlKey){ 
    switch(event.keyCode){ 
     case Keyboard.C: 
     trace("need to copy"); 
     break; 
    } 
    } 
} 

.ctrlKey,應檢測命令和控制鍵在Mac上,如果我按組合控制+ C的工作,但如果我使用命令+ C沒什麼,我也試過

event.commandKey 

我想,也許在內置在菜單中給我一些麻煩,我刪除然後仍然沒有,我失蹤了什麼?感謝您的任何幫助

+0

你如何試圖用'event.commandKey'?你是否替換了'event.ctrlKey'或者你是否用「和」將它添加到條件中? – puggsoy

回答

0

我也面臨同樣的問題,並通過爲剪貼板鍵添加本機菜單事件爲此做了一個解決方法。正如你所說的,「event.ctrlKey」不適用於MAC,並且「命令鍵」與C(複製)結合使用,V(粘貼),X(剪切),W(關閉),M(最小)將一直聽取AIR應用程序的本地菜單事件(buildIn菜單事件)。所以我添加了菜單選擇事件。

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         creationComplete="windowedapplication1_creationCompleteHandler(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
      { 
       this.addEventListener(KeyboardEvent.KEY_DOWN, onKey_PressHandler); 
      } 

      protected function onKey_PressHandler(event:KeyboardEvent):void 
      { 
       // for mac only statements 
       if(isMAC()) 
       { 
        if(NativeApplication.supportsMenu){ 
         if(event.keyCode == Keyboard.COMMAND) 
         { 
          if(event.type == KeyboardEvent.KEY_DOWN) 
          { 
           NativeApplication.nativeApplication.menu.addEventListener(Event.SELECT,onApplicationMenu_ClickHandler); 
          } 
          else 
          { 
           // remove event if it is no longer needed 
           NativeApplication.nativeApplication.menu.removeEventListener(Event.SELECT,onApplicationMenu_ClickHandler); 
          } 
         } 
        } 
       } 
      } 

      protected function onApplicationMenu_ClickHandler(event:Event):void 
      { 
       var menuItem:NativeMenuItem = event.target as NativeMenuItem; 

       switch(menuItem.label) 
       { 
        case "cut": 
         // do cut operation 
         trace("COMMAND + X"); 
         break; 
        case "copy": 
         // do copy operation 
         trace("COMMAND + C"); 
         break; 
        case "paste": 
         // do paste operation 
         trace("COMMAND + V"); 
         break; 
       } 
      } 

      private function isMAC():Boolean 
      { 
       return (Capabilities.version.substr(0,3) == "mac"); 
      } 
     ]]> 
    </fx:Script> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
</s:WindowedApplication> 

我希望這將解決您的問題...

+0

是的,幫助!,謝謝! – goseta