在Flash / Flex中支持国际键盘的策略

时间:2010-07-16 18:23:28

标签: flash flex internationalization keyboard

我有一个Flash / Flex应用程序,当与国际键盘一起使用时会显示出奇怪的行为。例如,我在此应用程序中扩展了TextInput,以便在用户按下连字符(' - ')键时允许特殊行为。当发生这种情况时,除了键入的文本外,我希望输入的文本用零填充到六位数。因此,如果用户输入“5-”,他们应该在字段“000005-”中看到。

在法语键盘上,用户需要启用CapsLock才能键入数字,并且6和连字符共享一个键。因此,当法国用户在启用CapsLock的情况下输入“6”时,他们在该字段中看到的是“000006-”。然而,似乎6和 - 字符都被发送到该字段。 6导致数字出现,并且 - 导致上述特殊行为。

我听说在这种情况下,TextEvent而不是KeyEvent的列表可能会有所帮助。我还没有尝试过,但我打算很快。但是,还有一些与国际键盘之间的差异有关的其他问题。所以我想知道是否有任何一般策略来确保对各种国际键盘的正确支持。

任何想法或想法?仅供参考,此应用程序目前使用Flex SDK 3.5和Flash Player 10。

3 个答案:

答案 0 :(得分:1)

仅供参考,正确的答案是侦听TextEvent而不是KeyboardEvent。我认为这是有道理的,因为当实际文本可用时,它可能已经从keyCode和charCode值正确翻译。

答案 1 :(得分:0)

您是否曾尝试过使用String.fromCharcode?的keyboardEvent.charCode

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 for IME的新API)处理此事件)

有关详细信息,我执行的内容有限:

Handling TextField-related Events - wonderfl build flash online

答案 2 :(得分: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; // €
    }
}