2010-07-16 46 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; // € 
    } 
}