. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .




 
 
SEGÉDLETEK Effektus-trükk

Kukac (@) karakter probléma megoldása Flash 5 alatt
  feltöltve: 2004.09.26 | szerző: Genin | olvasva: 4088 alkalommal

 

A Flash a legújabb verziójáig problémái voltak a @ karakterrel. Szerencsére az MX-ben már kijavították ezt a bakit, de nem mindenki tud, vagy akar áttérni a legújabb verzióra. Eddig a legtöbbször egy külön gombot tettünk a szövegdoboz mellé, ahova az e-mail címet akartuk beírni, de ez, valljuk be nem a legszebb megoldás, és ettől, még ha valaki megnyomta a kukac billentyűt, akkor a program bemásolta az éppen vágólapon lévő szöveget.

Most megoldjuk egy rövidke programkóddal, hogy a régebbi Flash tulajdonosok is tudjanak normális beviteli mezőt használni az e-mailekhez ;) Ezen kívül még megcsináljuk az & és a # jel kiíratását is, mert sajnos azok sem működnek 5-ös Flash alatt. /a kódot csak Flash 5, illetve Flash MX környezetben teszteltem/

A végeredmény így fog kinézni:

A felület elkészítése

Kezdjünk egy új dokumentumot. A Frame rate legyen 24 fps, szélesség 300 pixel, magasság 200 pixel, a háttér maradhat fehér.
Tegyünk egy Static textbox-ot a színpadra, és írjunk bele valami ilyesmit, hogy "Írd be az e-mail címedet:". Ezután helyezzünk el alatta egy Input textbox-ot, Variable legyen "mail". A szélességét állítsd be tetszőlegesen (vagy esetleg dinamikusan a tartalomtól függően ;). A háttérrel, díszítésekkel most nem foglalkozunk.
Ezután jelöljük ki a két textbox-ot, és nyomjunk egy F8-at (Insert->Convert to Symbol...), és csináljunk egy moziklippet (a neve legyen mondjuk "mail_mc").

Jöhet a kód

Jelöljük ki a mail_mc-t, hozzuk fel az Action ablakot, és írhatjuk is a kódot:

// alapértékek beállítása
onClipEvent(load){
     fent = 0;
     lent = 1;
     szoveg = "";
     this.mail = szoveg;
}

onClipEvent(enterFrame){
// ha nincs lenyomva az Alt
     if (!Key.isDown(18)){
          szoveg = this.mail;
     }

// ha az Alt le van nyomva, és a v/c/x nincs
     if (Key.isDown(18) && (!Key.isDown(86) && !Key.isDown(67) && !Key.isDown(88))){
          szoveg = this.mail;

          // ha nincs kijelölve rész
          if (Selection.getBeginIndex() == Selection.getEndIndex()){
               sz1 = szoveg.substring(0,Selection.getEndIndex());
               sz2 = szoveg.substring(Selection.getEndIndex(),szoveg.length);
          }
          else{      // ha van kijelölve rész
               sz1 = szoveg.substring(0,Selection.getBeginIndex());
               sz2 = szoveg.substring(Selection.getEndIndex(),szoveg.length);
          }
     }

// ha lenyomjuk az Alt-ot, és a v-t, és eddig nem volt lenyomva
     if (Key.isDown(18) && Key.isDown(86) && fent == 0){
          szoveg = sz1.concat("@").concat(sz2);
          this.mail = szoveg;
          kurzor = sz1.length + 1;
          Selection.setSelection( 0, 0 );
          Selection.setSelection( kurzor, kurzor );
          fent = 1;
          lent = 0;
     }

// ha lenyomjuk az Alt-ot, és a c-t, és eddig nem volt lenyomva
     if (Key.isDown(18) && Key.isDown(67) && fent == 0){
          szoveg = sz1.concat("&").concat(sz2);
          this.mail = szoveg;
          kurzor = sz1.length + 1;
          Selection.setSelection( 0, 0 );
          Selection.setSelection( kurzor, kurzor );
          fent = 1;
          lent = 0;
     }

// ha lenyomjuk az Alt-ot, és a x-et, és eddig nem volt lenyomva
     if (Key.isDown(18) && Key.isDown(88) && fent == 0){
          szoveg = sz1.concat("#").concat(sz2);
          this.mail = szoveg;
          kurzor = sz1.length + 1;
          Selection.setSelection( 0, 0 );
          Selection.setSelection( kurzor, kurzor );
          fent = 1;
          lent = 0;
     }

// ha lenyomjuk az Alt-ot, és a v/c/x-et, és eddig is le volt lenyomva
     if (Key.isDown(18) && (Key.isDown(86) || Key.isDown(67) || Key.isDown(88)) && fent == 1){
          this.mail = szoveg;
          Selection.setSelection( kurzor, kurzor );
     }

// ha elengedjük az Alt-ot, vagy a v/c/x-et, és eddig le volt nyomva
     if((!Key.isDown(18) || (!Key.isDown(86) && !Key.isDown(67) && !Key.isDown(88))) && lent == 0){
          fent = 0;
          lent = 1;
     }
}


Akkor most jöhet a magyarázat :)

A mozi betöltésénél nullázom az adatokat. Ezután jön az enterFrame eseménykezelő.
A gombok lenyomását a Key.isDown(n) paranccsal vizsgálom (ahol, ha n=18, akkor az Alt billentyű van lenyomva, ha n=86, akkor a v billentyű, ha n=67, akkor a c, és ha n=88, akkor pedig az x billentyű).

Az első esetvizsgálatnál csak egyszerűen elmentem a szoveg sztringbe a textbox tartalmát.

Amikor lenyomjuk az Alt gombot, akkor megnézem a Selection objektummal, hogy van-e kijelölve rész (ha a kijelölés eleje, és vége megegyezik, akkor természetesen nincs kijelölve szöveg). Ha nincs kijelölve szöveg, akkor egyszerűen elvágom a szoveg sztringet, és elmentem a két részt sz1, ill. sz2 sztringekbe. Ha van kijelölés, akkor a kijelölés előtti és utáni részeket mentem el.

Ezután három hasonló feltétel jön, ezért csak az elsőt magyarázom el.
Ha egyszerre lenyomom az Alt és a v billentyűt (vagyis a @-ot), akkor a szoveg sztringbe beszúrok egy @-ot, mégpedig úgy, hogy összekapcsolom az sz1-et egy @ jellel, majd az sz2 sztringgel. Ezután frissítem a textbox tartalmát. A frissítés után a kurzor sajnos nem ott található, ahol annak lennie kéne, úgyhogy pozícionálni kell, ha azt akarjuk, hogy a felhasználó ne vegye észre a trükkünket :) A helyet az sz1 hosszából tudom meg, amihez hozzáadom a @ jel értékét. Azért viszem a szöveg elejére a kis villogó botocskát, mielőtt a helyére tenném, mert a szövegdoboz frissítése után elmozdul a szöveg a dobozban, és ezzel a módszerrel a helyére viszem.

Ha az utolsó előtti feltételt elhagynánk, akkor nem lenne semmi, ami megfogná az Alt+v eredeti hatását, és elkezdené beszúrni a vágólapot. Ezt a textbox frissítésével kiküszöböljük, de még a kurzort vissza kell vinni az eredeti helyére.

Az utolsó vizsgálatnál pedig csak alapértékre állítjuk vissza a változókat.


Ezzel a végére is értünk a segédletnek. Bár egy kicsit elkésve készült el, de remélem azért még elég sokan fogják használni ezt a trükköt.
 
 
 

© Devnet.hu. A segédletek semmilyen formában nem másolhatók, publikálhatók a Devnet.hu és a szerzők közös írásos engedélye nélkül.
 
. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .