Flash текстовое поле с отображением неверных символов - PullRequest
0 голосов
/ 14 декабря 2010

Я столкнулся со странной ошибкой с формой контактной информации, разработанной с помощью Flash CS5 Prof. Моя раскладка клавиатуры настроена на английский (Великобритания), и нажатие shift-2 дает мне «, shift-» дает мне @в Chrome, Notepad, Word и т. д. В текстовом поле во флэш-форме ввод shift-2 дает мне @, а shift- «дает мне».Я понимаю, как раскладывается клавиатура США, но это сбивает с толку моих пользователей.

Как изменить текстовое поле, чтобы оно правильно работало для моей раскладки клавиатуры?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

Существует известная ошибка при использовании wmode = "transparent" или wmode = "opaque", которая в некоторых браузерах (Firefox и, возможно, Crome) будет приводить к такого рода ошибкам, по умолчанию используемая в США. Насколько я знаю, для этого нет хорошего решения, есть только довольно обременительные обходные пути. Если вы воспользуетесь ошибкой в ​​поиске флеш-клавиатуры, вы найдете довольно много информации и обходных путей.

1 голос
/ 14 декабря 2010

Я не нашел способа указать локаль во Flash, однако следующий код делает то, что вы хотите:

package {
    import flash.display.Sprite;
    public class NewClass extends Sprite {      
        public function NewClass() {
            addChild(new TextFieldReplacingChars());
        }
    }
}

import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.TextEvent;
import flash.events.TimerEvent;
import flash.text.TextField;
import flash.utils.Timer;

class TextFieldReplacingChars extends Sprite {
    private var tf:TextField;
    private var toReplace:Object;
    private var str1:String = '';
    private var str2:String = '';
    private var pressedKeyCount: int = 0;
    private var timer:Timer;
    public function TextFieldReplacingChars() {
        tf = new TextField();
        addChild(tf);
        tf.type = 'input';
        tf.addEventListener(TextEvent.TEXT_INPUT, ontext);
        tf.addEventListener(KeyboardEvent.KEY_DOWN, onPress);
        tf.addEventListener(KeyboardEvent.KEY_UP, onRelease);
        toReplace = new Object();
        toReplace['"'] = '@';
        toReplace['@'] = '"';
        timer = new Timer(1, 1);
        timer.addEventListener(TimerEvent.TIMER_COMPLETE, updateText);
    }

    private function onRelease(e:KeyboardEvent):void {
        pressedKeyCount -= pressedKeyCount > 0 ? 1 : 0;
    }

    private function onPress(e:KeyboardEvent):void {
        pressedKeyCount += toReplace[String.fromCharCode(e.charCode)] ? 1 : 0;
    }

    private function ontext(e:TextEvent):void { 
        if (toReplace[e.text] && pressedKeyCount > 0) {
            str1 = tf.text.substring(0, tf.caretIndex) + toReplace[e.text];
            str2 = tf.text.substring(tf.caretIndex, tf.text.length);                
            timer.start();
        }       
    }

    private function updateText(e:TimerEvent):void {
        tf.text = str1 + str2;
        tf.setSelection(str1.length, str1.length);
    }
}
...