flash és más

Elkezdtem az Androidot tanulgatni, ide jegyzetelek magam és mások okulására. Flash programozás is lesz, ha úgy érzem, hogy van olyan amit szívesen megosztanék másokkal.

Friss topikok

Ctrl + Alt + V vagy AltGr + V Chromeban

2012.12.11. 10:26 hopetheorc

Több flashben készített applikációban is jelentkezik egy olyan probléma, ami megoldásért kiáltott, nevezetesen a @ jel használata beviteli mezőkben. Ez igazából a Chrome-ban jeletkezik, a Ctrl + Alt + V billentyűkombinációra nem csak a kukacot illeszti be a jószág, hanem a vágólapon található cuccot is. Ennek kiküszöbölésére találtam ki egy módszert, mert sehol nem találtam rá megoldást. Ez a megoldás csak magyar nyelvű Windows és billentyűzet kombónál működik,  német nyelvű billentyűzetnél ugyanez a probléma a Ctrl + Alt + Q betűnél jelentkezik. Ezt nem szűri ki az én megoldásom.


Nézzük tehát:

package
{
    import flash.events.Event;
    import flash.events.FocusEvent;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    
    // első körben kiterjesztem az osztályomat a szabványos TextField osztállyal 
    public class InputTextField extends TextField
    {
        private var firstPart:String;
        private var lastPart:String;
        private var car:int;
        private private var pressed:Boolean = false;
        
        public function InputTextField()
        {
            // a super() függvénnyel biztosítom azt, hogy az osztályom 
            // constructor függvénye a TextField constructor függvényének 
            //tulajdonságait megkapja 
            super();
            //hozzáadok egy MouseEvent.CLICK eseményt az osztályomhoz 
            this.addEventListener(MouseEvent.CLICK, addFocusHandlers);
        }
        
        private function addFocusHandlers(e:MouseEvent):void
        {
            //a példányosított szövegmezőre kattintva a következő eseménykezelők 
            //kerülnek: 
            //leszedem a CLICK eseménykezelőt - ez majd a későbbiekben 
            //visszakerül, ha elveszti a fókuszt a szövegmezőnk
            this.removeEventListener(MouseEvent.CLICK, addFocusHandlers);
            
            //a FocusEvent.FOCUS_OUT lekapja a billentyűzet eseménykezelőket 
            //és saját magát majd visszateszi a CLICK eseménykezelőt 
            
            this.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler2);
            //Ha fölengedünk egy gombot, akkor az alábbi eseménykezelő 
            //hívódik meg: 
            this.addEventListener(KeyboardEvent.KEY_DOWN, detectKey);
            
            //Ha lenyomunk egy gombot, akkor az alábbi eseménykezelő 
            //hívódik meg: 
            this.addEventListener(KeyboardEvent.KEY_UP, releaseKey);
        
        }
        
        private function focusOutHandler2(e:FocusEvent):void
        {
            this.removeEventListener(KeyboardEvent.KEY_DOWN, detectKey);
            this.removeEventListener(KeyboardEvent.KEY_UP, releaseKey);
            this.addEventListener(MouseEvent.CLICK, addFocusHandlers);
            this.removeEventListener(FocusEvent.FOCUS_OUT, focusOutHandler2);
        }
        
        //ha a billentyűzeten lenyomódik egy vagy több gomb, letesztelem, 
        //hogy a pressed változó hamis értékű-e (Ez azért kell mert ez az 
        //eseménykezelő egy billentyű lenyomásával nem egyszer hívódik meg, 
        //hanem ismétlődik a rendszerbeállításoknak megfelelően), ha igen, 
        //akkor tesztelem a ctrl + alt + v billentyűkombinációt. 
        
        private function detectKey(e:KeyboardEvent):void
        {
            if (pressed == false)
            {
                if (e.ctrlKey && e.altKey && e.keyCode == 86)
                {
                    //a car változó a kocsi pozícióját menti el (az a villogó vonal 
                    //ami azt a pontot jelöli ahová be lesz szúrva a következő betű) 
                    car = this.caretIndex;
                    
                    //firstPart változó a textmezőben esetlegesen már beírt szöveget fogja 
                    //tartalmazni a kocsi pozíciója előtt 
                    firstPart = this.text.substring(0, car);
                    
                    //lastPart változó a textmezőben esetlegesen már beírt szöveget fogja 
                    //tartalmazni a kocsi pozíciója után 
                    lastPart = this.text.substring(car, this.text.length);
                    
                    //hozzácsapunk még egy Event.CHANGE eseménykezelőt a TextField-ünkhöz, 
                    //ez azért kell, hogy detektáljuk, ha változik a szövegmező tartalma 
                    this.addEventListener(Event.CHANGE, changeTextField);
                    
                    //a pressed változó igaz értéket kap 
                    pressed = true;
                }
            }
        }
        
        private function changeTextField(e:Event):void
        {
            //Ha változik a szöveg tartalma, akkor beszúrjuk a kukacot a két 
            //lementett szövegrészletünk közé 
            this.text = firstPart + "@" + lastPart;
            
            //majd a kocsit a megfelelő helyre teszzük, ha még írna a szövegmezőbe 
            //a júzer 
            this.setSelection(car + 1, car + 1);
        }
        
        private function releaseKey(e:KeyboardEvent):void
        {
            //Ha felemeli az ujját a júzer a V betűről, akkor pressed változó ismét 
            //false állapotba kerül, valamint leveszzük a szövegmezőben változást 
            //értelmező eseménykezelőt 
            if (e.keyCode == 86)
            {
                this.removeEventListener(Event.CHANGE, changeTextField);
                pressed = false;
            }
        }
    }
}

Ha van kérdés, szívesen segítek. Esetleg ha tudtok jobb megoldást és az nem az angol billentyűzetre váltás és utána a shift + 2 akkor azt szívesen fogadom :)

További jó kódolást!

Szólj hozzá!

Címkék: flash @ chrome Ctrl+Alt+V AltGr+V

A bejegyzés trackback címe:

https://hopetheorc.blog.hu/api/trackback/id/tr444952996

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása