2010-12-13 3 views
0

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

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

ответ

2

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

+0

Спасибо! Поскольку это происходит, я использую wmode = "transparent", чтобы показать актив, чтобы это имело смысл. Я сделал что-то похожее на www0z0k и заменил символы вручную. – mdm

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); 
    } 
} 
+0

Это то, что я сделал в конце - спасибо за ваш вклад. – mdm

Смежные вопросы