2013-05-10 42 views
0

使用flash pro处理虚拟键盘,并且im有点卡住。 我有一种方法来控制克拉,所以你可以滚动文本字段,但我希望能够在克拉正在使用的代码中准确地打出字母。AS3在Caret上附加文字

下面是我的键盘控制

// keyboard controls 
for (var i=0; i<lettersSmall.length; i++) 
{ 
    this["key_" + lettersSmall.charAt(i)].addEventListener(MouseEvent.MOUSE_UP,_keys); 
    letterButtonSmall["key_" + lettersSmall.charAt(i)] = lettersSmall.charAt(i); 
    letterButtonCaps["key_" + lettersSmall.charAt(i)] = lettersCaps.charAt(i); 
} 



function _keys(event:MouseEvent):void 
{ 
    curTextPos = textSelect.caretIndex; 
    strehrows3(); 
    stage.focus = textSelect; 

    textSelect.setSelection(curTextPos,curTextPos); 
    if (electoff.currentFrame == 2) 
    { 
     ajWidth(event); 
    } 
    if (terminalinput.currentFrame == 2) 
    { 
     TrWidth(null); 
    } 
    if (control == "on" && menu1.visible == false) 
    { 
     if (! shift) 
     { 
      textSelect.appendText(letterButtonSmall[event.target.name]); 
      inputMaxWidth = textSelect.width; 
     } 
     else 
     { 
      textSelect.appendText(letterButtonCaps[event.target.name]); 

      shift = false; 
      inputMaxWidth = textSelect.width; 
     } 
     savedTxt = textSelect.text; 
     textSelect.setSelection(textSelect.length,textSelect.length); 
     if (textSelect.width <= 134.05) 
     { 
      //textSelect.autoSize = TextFieldAutoSize.LEFT; 
      textSelect.x = 1.2; 
     } 
     if (textSelect.width >= 134.05) 
     { 
      //textSelect.autoSize = TextFieldAutoSize.LEFT; 
      textSelect.x = 1.2-(textSelect.width-134.05); 
     } 
    } 
    textSelect.setSelection(textSelect.length,textSelect.length); 
    if (electoff.currentFrame == 2) 
    { 
     ajWidth(event); 
    } 
    if (terminalinput.currentFrame == 2) 
    { 
     TrWidth(null); 
    } 

    focuser(); 
    strehrows3(); 
    _fontSize(); 
    textSelect.width = inputMaxWidth; 
} 

回答

0

你可以这样来做:

var inputStr:String = event.target.name; //This looks like it's value of your key pressed? 
var caret:int = textSelect.textField.caretIndex; 
var afterCaretText:String = textSelect.text.substr(caret); 
var beforeCaretText:String = textSelect.text.substr(0,caret); 

textSelect.text = beforeCaretText + inputStr + afterCaretText; 

你可以做到这一切在一个行而不创建四个变量,但我觉得它更容易明白这是怎么回事。