• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash MX 2004

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-03-2005, 20:29   #1 (permalink)
Rübennase
 
Benutzerbild von thomiko
 
Registriert seit: Dec 2003
Ort: Niederrhein
Beiträge: 291
seltsames Key-Verhalten

Hallo miteinander,

ich habe die letzten Tage ein Tool geschrieben, das automatisch einen mit lateinischen Buchstaben geschriebenen Text in kyrillischen Text verwandelt. Mittlerweile kann man sich den kyrillischen Text auch als PDF drucken lassen oder Textbausteine in SharedObjects speichern und dann später in anderen Text einfügen: http://www.computing.dcu.ie/~tkoller.../cyrillica.php

Soweit so gut! Bei mir läuft das auch in allen Browsern einwandfrei (sogar im IE ). Nur habe ich gerade auf dem Computer einer Kollegin (Windows, IE 6.0) festgestellt, dass dort Leer- und Satzzeichen nicht dargestellt werden und ich bin ehrlich gesagt etwas ratlos. Außerdem konnte ich bei ihr nichts mittels "save text" im SharedObject abspeichern (beim Versuch danach selbiges mittels "load text" zu laden ist das SO leer). Ach ja: Ihre SO's waren nicht "gesperrt".

Zum technischen Ablauf: jeder Tastendruck wird über einen Listener abgefangen. Die eingegebenen Zeichen werden nicht direkt angezeigt, sondern in einem Array zwischengespeichert. Aus diesen Array werden dann der angezeigte lateinische und kyrillische Text generiert.

Wurde eine Buchstaben-Taste gedrückt, für die es einen zugeordneten kyrillischen Buchstaben gibt, dann wird dieser Buchstabe in dem Input-Array gespeichert ("C" + Buchstabe, wenn ohne ESC-Taste; "ES" + Buchstabe, wenn mit ESC-Taste).
Alle anderen Zeichen (Leer-, Satzzeichen usw.) werden mit
PHP-Code:
String.fromCharCode(key_code
im Array gespeichert, wobei key_code mit getAscii() ermittelt wurde.

Ich schicke hier mal den Code für den Listener:
PHP-Code:
key_obj = new Object();
key_obj.onKeyDown = function() {
    if (
Selection.getFocus() == "_level0.input_txt") {
        
// 'typing' dient als Sperre fuer den onEnterFrame, der aus 'input'
        // die beiden Texte generiert
        
typing true;
        var 
key_code:Number Key.getAscii();
        var 
key_num:Number Key.getCode();
        switch (
true){
            
// latin letter or '#'
            
case (key_code == 35 || (key_code >= 65 && key_code <= 90) || (key_code >= 97 && key_code <= 122)):
                
// ESC + character
                
if (Key.isDown(Key.ESCAPE)) {
                    if (
_root[browser "_ctrl_chars"][String.fromCharCode(key_code)] != undefined) {
                        
input.splice(current++, 0"ES" String.fromCharCode(key_code));            
                    }
                    else{
                        
input.splice(current0"");
                        empty.
push(current);
                    }
                }
                
// normal alphabetical characters
                
else {
                    
// mapping available
                    
if (_root[browser "_normal_chars"][String.fromCharCode(key_code)] != undefined) {
                        
input.splice(current++, 0"C" String.fromCharCode(key_code));
                    }
                }
                break;        
            
// European diacritics
            
case (key_code >= 191):
                
input.splice(current0"");
                empty.
push(current);            
                break;
            
// backspace
            
case (Key.isDown(Key.BACKSPACE)):
                var 
begin Selection.getBeginIndex();
                var 
end Selection.getEndIndex();
                if (
begin == end){
                    
input.splice(current 11);
                    if (
current 0){
                        
current--;
                    }
                }
                else{
                    
input.splice(beginend begin);
                    
current begin;
                }
                break;
            
// delete
            
case (Key.isDown(Key.DELETEKEY)):
                var 
begin Selection.getBeginIndex();
                var 
end Selection.getEndIndex();
                if (
begin == end){
                    
input.splice(current1);
                }
                else{
                    
input.splice(beginend begin);
                    
current begin;
                }    
                break;
            
// left_arrow
            
case (Key.isDown(Key.LEFT)):
                if (
current 0){
                    
current--;
                }
                break;                
            
// right_arrow
            
case (Key.isDown(Key.RIGHT)):
                if (
current input.length){
                    
current++;
                }
                break;
            
// up + down -> no action
            
case (Key.isDown(Key.UP) || Key.isDown(Key.DOWN) || Key.isDown(Key.PGDN) || Key.isDown(Key.PGUP)):
                
input.splice(current 10"");
                empty.
push(current 1);
                break;                
            case (
Key.isDown(Key.HOME)):
                
current 0;
                break;
            case (
Key.isDown(Key.END)):
                
current input.length;
                break;
            
// space
            
case (Key.isDown(Key.SPACE)):
                
input.splice(current++, 0String.fromCharCode(key_code));
                break;                
            case (
Key.isDown(Key.ESCAPE) || Key.isDown(Key.CONTROL)):
                break;
            case (
key_code 191):
                if (
key_num != 16){
                    
input.splice(current++, 0String.fromCharCode(key_code));
                }
                break;
        }
        
typing false;
    }
};
Key.addListener(key_obj); 
'current' speichert die aktuelle Textstelle, 'input' ist das erwähnte Input-Array.

Wie gesagt funktioniert es an sich einwandfrei, nur halt nicht auf jedem Computer.

Irgendwelche Ideen dazu?

Kann das mit unterschiedlichen Zeichensätzen auf unterschiedlichen Computern zu tun haben (und folglich unterschiedlichen getAscii-Werten)? Kann man da eine gewisse Einheitlichkeit irgendwie erzwingen?

Vielen Dank schon mal fürs Zeitnehmen,

Thomas


EDIT: Das mit dem SO könnte sich geklärt haben. Ich habe wohl während einer der vielen Änderungen einen kleinen Fehler in den SO-Programmteil eingebaut. Mal morgen bei meiner Kollegin vorbeischauen ...

Geändert von thomiko (30-03-2005 um 23:03 Uhr)
thomiko ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele