25 Detaljnije tumacenje skripti i funkcija upotrebljenih u skript fajlu Sound Recorder.jss. (nastavak 5.) Skripta "SelectAButton" izgleda ovako: Script SelectAButton () var int index let index = 0; if InHJDialog () then SayFormattedMessage (OT_ERROR, msg13_L) SayFormattedMessage (OT_ERROR, msg14_L) SayFormattedMessage (OT_ERROR, msg15_L) return endif if (! DialogActive ()) || (MenusActive ()) then SayFormattedMessage (OT_ERROR, msg8_L + msg2_L) ; "Button not found" return endif ; if not in SoundRecorder main window let nSuppressEcho = true let index = DlgSelectItemInList (strToolbar, strDialogName, true) Delay (2) if (index == 1) then PressButton (forward, msg6_L) ; "forward" elif (index == 2) then PressButton (play, msg3_L) ; "play" elif (index == 3) then PressButton (record, msg4_L) ; "Record" elif (index == 4) then PressButton (rewind, msg5_L) ; "Rewind" elif (index == 5) then PressButton (stop, msg7_L) ; "stop" endif EndScript Na pocetku skripte deklarisemo celobrojnu promenljivu index koja se koristi za prihvatanje indeksa odabrane kontrole sa liste kontrola. Ovoj promenljivoj se eksplicitno dodeljuje vrednost nula radi bolje preglednosti i razumljivosti skripte, mada ova promenljiva pre dodele vrednosti vec ima vrednost nula. Usledecim redovima: if InHJDialog () then SayFormattedMessage (OT_ERROR, msg13_L) SayFormattedMessage (OT_ERROR, msg14_L) SayFormattedMessage (OT_ERROR, msg15_L) return endif Ispituje se da li je mozda vec otvoren neki Jaws-ov dijaloski prozor, pa ako jeste, daje se korisniku obavestenje da u isto vreme ne moze biti otvoreno vise od jednog Jaws dijaloskog prozora i da se postojeci mora prethodno zatvoriti. Nakon obavestenja, skripta se napusta. Poruke msg13_L, msg14_L, i msg15_L, definisane su u "SndRec32.jsm" fajlu. U sledecim redovima: if (! DialogActive ()) || (MenusActive ()) then SayFormattedMessage (OT_ERROR, msg8_L + msg2_L) ; "Button not found" return endif ; if not in SoundRecorder main window ispituje se uslov identican onom koji smo videli u "PressButton" funkciji. Ovde se dodatno daje obavestenje da dugme nije pronadjeno i napusta se skripta. U redu: let nSuppressEcho = true postavlja se vrednost globalne promenljive na jedinicu, ili logicku vrednost true ili "tacno". U redu: let index = DlgSelectItemInList (strToolbar, strDialogName, true) dodeljujemo promenljivoj "index", celobrojnu povratnu vrednost funkcije "DlgSelectItemInList". Ova funkcija je zaduzena da prikaze Jaws-ov prozor sa listom zeljenih opcija. Funkcija ima cetiri parametra. Prvi parametar "strToolBar", definisan je u fajlu "SndRec32.jsh" kao: strToolBar = "ForwardButton|PlayButton|RecordButton|RewindButton|StopButton", i predstavlja string sastavljen od stavki liste, odvojenih medjusobno uspravnom crtom, (karakter 007). Drugi parametar "strDialogName", definisan je u fajlu "SndRec32.jsh" kao: strDialogName = "Select A Button", I to je string koji predstavlja ime prozora sa listom kontrola. Treci parametar je celobrojna vrednost koja utice na to da li ce lista biti sortirana. Ukoliko je ova vrednost "true", (svaka vrednost razlicita od nule), lista ce biti sortirana Cetvrti parametar je opcionalan i u posmatranom redu je izostavljen. Njegova uloga je da ukaze na redni broj stavke za koju zelimo da bude oznacena pri pojavljivanju prozora sa listom. Ukoliko u ovom dijaloskom prozoru odustanemo, povratna vrednost ce biti nula. Nakon sto napustimo prozor sa listom, skripta pravi u redu: Delay (2) pauzu od dve desetinke sekunde i nastavlja. Sledi programska "If.. ElIf.. EndIf" struktura: if (index == 1) then PressButton (forward, msg6_L) ; "forward" elif (index == 2) then PressButton (play, msg3_L) ; "play" elif (index == 3) then PressButton (record, msg4_L) ; "Record" elif (index == 4) then PressButton (rewind, msg5_L) ; "Rewind" elif (index == 5) then PressButton (stop, msg7_L) ; "stop" endif koja ce pozvati funkciju "PressButton" i na osnovu vrednosti promenljive index proslediti joj odgovarajuce parametre kako bi odgovarajuca kontrola bila aktivirana. Na proslom casu smo videli kako su parametri upotrebljeni u ovoj funkciji. Ostalo je jos da objasnimo skriptu "LimitSpeech" koja izgleda ovako: Script LimitSpeech () if (LimitSpeech == 0) then let LimitSpeech = 1 SayFormattedMessage (OT_STATUS, msg9_L) ; "LimitSpeech on" return endif if (LimitSpeech >= 1) then let LimitSpeech = 0 SayFormattedMessage (OT_STATUS, msg10_L) ; LimitSpeech off" return endif EndScript Ova skripta je zaduzena za naizmenicno postavljanje vrednosti globalne promenljive LimitSpeech na jedinicu i nulu. Vrednost ove promenljive utice na to da li ce pri izvrsenju funkcije "PressButton" biti izgovoreno ime graficke kontrole. U redovima: if (LimitSpeech == 0) then let LimitSpeech = 1 SayFormattedMessage (OT_STATUS, msg9_L) ; "LimitSpeech on" return endif Posmatra se da li promenljiva "LimitSpeech" ima vrednost nula, pa ako je tako, ova se vrednost postavlja na jedinicu i daje se poruka da je ogranicenje izgovora ukljuceno, i potom se napusta skripta. U sledecim redovima: if (LimitSpeech >= 1) then let LimitSpeech = 0 SayFormattedMessage (OT_STATUS, msg10_L) ; LimitSpeech off" return endif Posmatra se suprotno, to jest da li je promenljiva "LimitSpeech" sa vrednoscu jedan, pa ako jeste, postavlja se na nulu i daje se poruka o iskljucenom ogranicenju govora i takodje se skripta napusta. Poruke msg9_L, i msg10_L su definisane u "SndRec32.jsm" fajlu. Ovim bi sva objasnjenja Sound Recorder.jss fajla, koji smo uzeli kao primer jednog profesionalno izradjenog skript fajla, bila iscrpljena. Ovaj skript fajl je samo jedno u nizu mogucih resenja problema koje smo imali da prevazidjemo u prilagodjavanju Sound Recorder-a. Svakako nije najbolje, ali je dovoljno dobro uradjeno kako bi usmerilo pocetnika u pisanju slicnih fajlova. Ako vam je upoznavanje sa ovim skript fajlom dalo dodatnu sigurnost u pisanju skripti, pronadjite neku neposlusnu aplikaciju i pokusajte da je uz pomoc skripti pripitomite kako bi je Jaws korektno tumacio. "Lekcija 26." "Skok na sadrzaj "