我遇到了一个奇怪的错误,其中包含使用Flash CS5 Prof开发的联系人详细信息表格。我的键盘布局设置为英语(英国),按shift-2给我一个“,shift-”给我一个@在Chrome,记事本,Word等中。在flash表格的文本字段中,输入shift-2给我@但是shift-'给了我'。我知道这是美国键盘的映射方式,但它让我的用户感到困惑。
如何更改文本字段以使其在键盘布局中正常工作?
答案 0 :(得分:2)
使用wmode =“transparent”或wmode =“opaque”时存在一个已知错误,在某些浏览器(Firefox和可能是Crome)中,会出现这类错误,默认为美国键盘布局。据我所知,没有好的解决方案,只有相当麻烦的解决方法。如果你谷歌的Flash wmode键盘错误,你会发现很多信息和解决方法。
答案 1 :(得分:1)
我没有找到在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);
}
}