2010-07-16 48 views
2

我有一個Flash/Flex應用程序與國際鍵盤一起使用時顯示出奇怪的行爲。例如,我在這個應用程序中擴展了TextInput以允許用戶按下連字符(' - ')鍵時的特殊行爲。當發生這種情況時,我希望輸入的文本除了輸入六位數字的文本外還填充零。所以如果用戶輸入「5」,他們應該在字段「000005-」中看到。在Flash/Flex中支持國際鍵盤的策略

在法語鍵盤上,用戶需要啓用CapsLock鍵入數字,並且6和連字符共享一個鍵。因此,當法國用戶在啓用CapsLock的情況下鍵入「6」時,他們在該字段中看到的是「000006-」。然而,看起來這6個字符和 - 字符都被髮送到了現場。 6導致數字出現,並導致上述特殊行爲。

我聽說在這種情況下,TextEvent代替KeyEvent的列表可能會有所幫助。我還沒有嘗試過,但我打算很快。但是,還有一些其他問題與國際鍵盤之間的差異有關。所以我想知道是否有任何一般的策略來確保對各種國際鍵盤的正確支持。

任何想法或想法?僅供參考,此應用程序目前使用Flex SDK 3.5和Flash Player 10.

回答

1

僅供參考,正確的答案是監聽TextEvent,並將而非的KeyboardEvent。我認爲這是有道理的,因爲在實際文本可用時,它大概已經從keyCode和charCode值正確轉換。

0

你有沒有嘗試keyboardEvent.charCode與String.fromCharcode?

private function onKeyDown(e:KeyboardEvent):void { 
    var c:String = String.fromCharCode(e.charCode); 
    switch (c) { 
    case '-': .... 
    } 
} 

在TextEvent.TEXT_INPUT事件處理文本的操作將是不錯,但我不推薦這種方法,因爲當TextEvent.TEXT_INPUT出動時間已FP10和FP10.1相差不大(10.1一對於IME處理這個事件)

有關詳細信息新的API,我做了有限的實施:

Handling TextField-related Events - wonderfl build flash online
+0

好,我是充滿希望的,因爲這將是一個非常容易解決。不幸的是,我發現在上述場景中,無論CapsLock是否關閉,String.fromCharCode(event.charCode)調用都會返回「 - 」。所以這不是解決這個問題的方法,但是謝謝你的迴應。我將嘗試接下來處理TextEvent。 – lje 2010-07-19 20:44:31

0

試試這個。它對我來說效果很好。 有了這個Tool,這Table您本地化它爲您的有針對性的鍵盤佈局

var c:uint; 
var symbol:Number = KeyToSymbol(kEvent.keyCode, kEvent.shiftKey, kEvent.altKey); 
if (symbol > -1) 
    c = SymbolDE(symbol); 
else 
    c = kEvent.charCode; 



function KeyToSymbol(code:Number=-1, shift:Boolean=false, alt:Boolean=false) 
{ 
    var symbol:Number = -1; 

    if (shift) { 
     switch(code) { 
      case 49: symbol = 0; break; 
      case 50: symbol = 1; break; 
      case 51: symbol = 2; break; 
      case 52: symbol = 3; break; 
      case 53: symbol = 4; break; 
      case 54: symbol = 5; break; 
      case 55: symbol = 6; break; 
      case 56: symbol = 8; break; 
      case 57: symbol = 10; break; 
      case 48: symbol = 12; break; 
      case 219: symbol = 14; break; 
      case 221: symbol = 17; break; 
      case 187: symbol = 19; break; 
      case 191: symbol = 22; break; 
      case 189: symbol = 25; break; 
      case 190: symbol = 27; break; 
      case 188: symbol = 29; break; 
      case 222: symbol = 31; break; 
      case 192: symbol = 33; break; 
      case 186: symbol = 35; break; 
      case 226: symbol = 38; break; 
      case 220: symbol = 41; break; 
     } 
    }else if (alt) { 
     switch(code) { 
      case 55: symbol = 7; break; 
      case 56: symbol = 9; break; 
      case 57: symbol = 11; break; 
      case 48: symbol = 13; break; 
      case 219: symbol = 16; break; 
      case 187: symbol = 21; break; 
      case 81: symbol = 36; break; 
      case 226: symbol = 39; break; 
      case 69: symbol = 42; break; 
     } 
    }else { 
     switch(code) { 
      case 219: symbol = 14; break; 
      case 187: symbol = 20; break; 
      case 191: symbol = 23; break; 
      case 189: symbol = 24; break; 
      case 190: symbol = 26; break; 
      case 188: symbol = 28; break; 
      case 222: symbol = 30; break; 
      case 192: symbol = 32; break; 
      case 186: symbol = 34; break; 
      case 226: symbol = 37; break; 
      case 220: symbol = 40; break; 
     } 
    } 
    return symbol; 
} 


function SymbolDE (symbol:Number = -1) { 
    switch(symbol) { 
     case 0: return 33; break; // ! 
     case 1: return 34; break; // " 
     case 2: return 167; break; // § 
     case 3: return 36; break; // $ 
     case 4: return 37; break; // % 
     case 5: return 38; break; // & 
     case 6: return 47; break; /// 
     case 7: return 123; break; // { 
     case 8: return 40; break; // ( 
     case 9: return 91; break; // [ 
     case 10: return 41; break; //) 
     case 11: return 93; break; // ] 
     case 12: return 61; break; // = 
     case 13: return 125; break;  // } 
     case 14: return 63; break; // ? 
     case 15: return 223; break; // ß 
     case 16: return 92; break; /* \ */ 
     case 17: return 96; break; // ´ 
     case 19: return 42; break; // * 
     case 20: return 43; break; // + 
     case 21: return 126; break; // ~ 
     case 22: return 39; break; // ' 
     case 23: return 35; break; // # 
     case 24: return 45; break; // - 
     case 25: return 95; break; // _ 
     case 26: return 46; break; // . 
     case 27: return 58; break; // : 
     case 28: return 44; break; // , 
     case 29: return 59; break; // ; 
     case 30: return 228; break; // ä 
     case 31: return 196; break; // Ä 
     case 32: return 246; break; // ö 
     case 33: return 214; break; // Ö 
     case 34: return 252; break; // ü 
     case 35: return 220; break; // Ü 
     case 36: return 64; break; // @ 
     case 37: return 60; break; // < 
     case 38: return 62; break; // > 
     case 39: return 124; break; // | 
     case 40: return 94; break; //^
     case 41: return 186; break; // ° 
     case 42: return 128; break; // € 
    } 
}