24 Detaljnije tumacenje skripti i funkcija  upotrebljenih u skript fajlu Sound Recorder.jss. (nastavak 4.)

Pogledajmo sledecih pet skripti:
Script StartRecord ()
PressButton (record, msg4_L) ; "record"
EndScript

Script ClickStop ()  
PressButton (stop, msg7_L) ; "stop"
EndScript

Script ClickPlay ()
PressButton (play, msg3_L) ; "play"
EndScript

Script ClickFastForward ()
PressButton (forward, msg6_L) ; "forward"
EndScript

Script ClickRewind ()
PressButton (rewind, msg5_L) ; "rewind"
EndScript

Svaka od navedenih skripti ima zadatak da aktivira jednu od pet grafickih kontrola Sound Recorder-a. To se postize pozivom funkcije "PressButton" uz prosledjivanje odgovarajucih parametara.
Sada cemo detaljno pogledati ovu funkciju:

Void Function PressButton (int iButton, string sButton)
var
	handle hwnd
let hwnd = GetRealWindow (GetFocus ())
if (! DialogActive ()) || (MenusActive ()) then
	return
endif
SaveCursor ()
JAWSCursor ()
SaveCursor ()
MoveToControl (hwnd, iButton)
Delay (4)
if (GetControlID (GetCurrentWindow ()) != iButton) then
	SayFormattedMessage (OT_ERROR, sButton + msg8_L + msg2_L) ; "button not found"
	return
endif
if LimitSpeech == 0 then
	Say (sButton, OT_CONTROL_NAME)
endif
LeftMouseButton ()
EndFunction

Funkcija ima dva parametra.
Prvi parametar je celobrojna vrednost koja predstavlja ID broj graficke kontrole koju zelimo aktivirati. ID konstante za graficke kontrole su definisane u "SndRec32.jsh" fajlu ovako:
forward = 206,
	play = 207,
	record = 209,
	rewind = 205,
stop = 208,

Drugi parametar je string koji predstavlja poruku koja ce biti izgovorena pri aktiviranju graficke kontrole. Ove poruke su u "SndRec32.jsm" fajlu definisane kao:
@msg3_L
play
@@
@msg4_L
record
@@
@msg5_L
rewind
@@
@msg6_L
forward
@@
@msg7_L
stop
@@

Na pocetku funkcije deklarisemo jednu handle promenljivu i dodeljujemo joj vrednost u redu:
let hwnd = GetRealWindow (GetFocus ())

kao povratnu vrednost funkcije "GetRealWindow" koja je objasnjena na jednom od prethodnih casova. To ce u ovom slucaju biti handle Sound Recorder-ovog prozora.

U sledecim redovima:
if (! DialogActive ()) || (MenusActive ()) then
	return
endif

ispituje se da li neki od delova slozenog uslova ukazuje da bi trebalo napustiti funkciju. To ce se desiti ukoliko smo ovu funkciju pozvali kada dijalog nije aktivan ili kada je meni aktivan. Delovi uslova su sacinjeni od funkcija koje smo vec ranije objasnili.

Ako uslov za napustanje funkcije nije ispunjen, preci ce se na izvrsenje sledecih redova:

SaveCursor ()
JAWSCursor ()
SaveCursor ()
MoveToControl (hwnd, iButton)
Delay (4)

u kojima se vrsi snimanje kursora i prelazak na Jaws kursor, odnosno pokazivac misa a zatim se on funkcijom "MoveToControl" pomera na zeljenu kontrolu. Ova funkcija ima dva parametra. Prvi je hwnd, handle prozora u kome se nalazi kontrola i njega smo pribavili na pocetku funkcije. Drugi je ID kontrole, iButton koji smo prosledili funkciji "PressButton" pri pozivu kao njen prvi parametar. Zatim funkcija "Delay" pravi pauzu od cetiri desetinke sekunde.

U sledecim redovima:
if (GetControlID (GetCurrentWindow ()) != iButton) then
	SayFormattedMessage (OT_ERROR, sButton + msg8_L + msg2_L) ; "button not found"
	return
endif

ispituje se uslov
GetControlID (GetCurrentWindow ()) != iButton

da li je mozda ID kontrole trenutno aktuelnog prozora ipak razlicit od onog koji smo prosledili funkciji parametrom iButton. To bi znacilo da funkcija "MoveToControl" nije uspela da pronadje trazenu kontrolu i postavi kursor na nju. To bi dovelo do toga da se izvrsi sledeci red unutar uslova.     
SayFormattedMessage (OT_ERROR, sButton + msg8_L + msg2_L)
koji obavestava korisnika da dugme nije pronadjeno. Poruka se sastoji iz tri dela
sButton + msg8_L + msg2_L
od kojih prvi "sButton" koji je funkcija "PressButton" dobila kao svoj drugi parametar, predstavlja ime kontrole. Druga dva dela citave poruke su poruke msg8_L i msg2_L koji su definisani u "SndRec32.jsm". Nakon poruke, funkcija se napusta nailaskom na "return" naredbu.

Ukoliko se ID ne razlikuje od trazenog, to znaci da je kontrola pronadjena i funkcija se nastavlja sa:
if LimitSpeech == 0 then
	Say (sButton, OT_CONTROL_NAME)
endif

tako sto se posmatra da li je globalna promenljiva "LimitSpeech" jednaka nuli, sto bi znacilo da izgovor imena kontrole pri aktiviranju, nismo ogranicili. Tako bi se izvrsila funkcija "Say", koja ima dva parametra. Prvi string parametar je tekst koji treba biti izgovoren a druga celobrojna je izlazni mod za izgovor koji smo vec sretali kod funkcije "SayFormattedMessage" kao prvi parametar.

Bilo da je prethodno ime kontrole izgovoreno ili ne, stize se do reda:

LeftMouseButton ()

koji konacno izvrsava zadatak ove funkcije, odnosno izvrsava levi klik misa na zeljenoj kontroli.

To je bila centralna, najvaznija i najvise koriscena funkcija u Sound Recorder.jss fajlu. Na sledecem casu nastavljamo sa objasnjenjima preostalih skripti.
 "Lekcija 25."

 "Skok na sadrzaj "