Logo dell'UIC Logo TUV

Unione Italiana dei Ciechi e degli Ipovedenti ETS - APS

 

Uiciechi.it

torna alla visualizzazione del numero 11 del Uiciechi.it

Numero 11 del 2021

Titolo: gli script di jaws 14c. Le procedure guidate: gestione dei pulsanti ed elementi base.

Autore: Abramo Volpato.


Articolo:
gli script di jaws 14c. Le procedure guidate: gestione dei pulsanti ed elementi base.

Di Abramo Volpato.

14.4. Le azioni di chiusura.

Un altro piccolo passo, ma ora possiamo dire davvero di essere giunti alla fine degli elementi preparatori. Anche in questo caso, come nel precedente, si tratta di un pezzo che in origine apparteneva alla procedura generale, ma che in questa forma risulta sicuramente più leggibile.

Il suo compito, come si evince dal titolo, è quello di gestire le azioni compiute al termine dell'elaborazione, sulla base del tipo di procedura trattata.

Esercizio 14.4.1. La funzione FineElaborazione.

FileScript. Default.JSS

Nome. FineElaborazione

Descrizione. Esegue le azioni ed i controlli per la conclusione della procedura guidata, chiamando le funzioni di gestione connesse alle procedure elaborate.

Ritorni. Di tipo Void. Nessuno.

Note.

1. La funzione è composta principalmente da un'unica struttura di controllo che, sulla base della categoria della procedura elaborata, indirizza per le relative vie dove sono chiamate le funzioni collegate.

2. Nel caso degli script a gestione personale, nella terza via della struttura, dopo la chiamata della relativa funzione, è eseguito comunque l'eventuale aggiornamento dei tasti di attivazione eventualmente inseriti o aggiornati.

3. In ogni caso, usciti dalla struttura principale, sono azzerati valori e dati delle variabili globali usate dalla procedura.

Codice.

Void Function FineElaborazione ()
Var String sTasti; combinazione tasti per attivare lo script

SpeechOn (TRUE); riattiva la sintesi
Delay (ATTESA); sospende temporaneamente il flusso
If gsCategoria == ELEMENTO Then; se si stanno elaborando gli elementi da ricercare,
; segnala l'avvio di una ricerca direttamente dalla procedura,
SayMessage (OT_ERROR, msgAvvioRicerca)
Let gsOggetto = SUCCESSIVO; reimposta l'oggetto dell'azione,
CallFunctionByName (gsChiama + DATO, gsSuffisso); e chiama la funzione
ElIf gsCategoria == MACRO Then; se sono invece da inserire le macro testuali,
; chiama la funzione passando, tra i dati, quello numerico come conversione della voce d'uscita
CallFunctionByName (gsChiama + DATO, gsSuffisso, IntToString (gnValore), TRUE)
ElIf gsCategoria == SCRIPTS Then; se invece si deve attivare uno script a gestione personale,
; chiama la funzione, ponendo il nome del file corrente come suffisso e la chiave come valore
CallFunctionByName (gsChiama + DATO, gsSuffisso, gsOggetto, gsChiave)
AggiornaTasti (); e trascrive le eventuali assegnazioni tasti modificate
EndIf; fine controllo categoria
ResettaCampi (); ripulisce la memoria dalle impostazioni
EndFunction

14.5. L'elemento principale della procedura.

Dopo tanti elementi accessori, siamo finalmente giunti al centro del nostro lavoro, la funzione che viene chiamata per gestire le procedure guidate. Oltre allo strumento principale, in questo blocco troveremo anche gli script tramite i quali iniziare a collaudarle, completando in particolare le funzionalità della ricerca di stringhe predeterminate.

Innanzi tutto va detto che sinora, lungo questo capitolo e nei precedenti, abbiamo cercato di cogliere ogni possibile spunto per iniziare a parlare di come sia strutturata la procedura. Giunti ora a realizzare materialmente la funzione che la gestisce, invece, possiamo entrare nel dettaglio di come sia fatto il suo codice.

14.5.1. I due cicli principali.

La funzione che andremo tra poco a realizzare, in estrema sintesi, si può ridurre a soli due cicli "While-EndWhile", l'uno dentro all'altro:

1. Un ciclo principale, tramite il quale si entra nella procedura e si impostano i dati per la singola schermata, come il titolo della finestra di dialogo e i pulsanti attivi.

2. Un ciclo secondario, dove si aggiornano i dati per la singola voce visualizzata, e viene eseguita l'istruzione che propone la finestra di scelta, che ricordiamo essere "DlgSelectItemInList ()".

Ogni volta che il flusso arriva all'ingresso di entrambi i cicli, quindi all'istruzione "While", viene portato a zero un valore il quale, finché rimarrà tale, farà continuare il ciclo. Per far uscire il flusso dai cicli, quindi, sarà sufficiente rendere positivi questi valori di controllo.

Nel dettaglio, se si imposta come positivo uno solo dei due valori, uscendo così dal ciclo secondario, di norma si cambierà solo la schermata, aggiornandone i relativi dati. Se invece saranno resi positivi entrambi i valori, si uscirà sia dal ciclo secondario, sia da quello principale, ponendo così fine alla procedura.

In altre parole, di fronte alla finestra di dialogo proposta da "DlgSelectItemInList ()", la pressione dei vari pulsanti potrà creare tre situazioni principali:

1. Se saranno premuti i pulsanti per agire sulle voci selezionate , ad esempio per modificarle, aggiungerne di nuove o cancellarle, non sarà cambiato nessuno dei due valori di controllo dei cicli; in questo modo, usciti dalla finestra di dialogo, il flusso tornerà all'inizio del ciclo secondario, limitandosi a modificare le impostazioni per la voce attiva, ed a riproporre la finestra di dialogo aggiornata.

2. Nelle procedure a più campi, come quella per gli script a gestione personale, se saranno premuti i tasti per andare alla schermata successiva o precedente, o ancora tornare a quella principale, sarà reso positivo il solo valore che controlla il ciclo secondario; così, il flusso potrà uscire da quest'ultimo per tornare all'inizio del ciclo principale, dove saranno impostati i dati relativi alla nuova schermata, quindi si rientrerà nel secondo ciclo dove sarà riproposta la nuova versione della finestra di dialogo.

3. Se infine si premeranno i tasti Invio o Escape, e si confermeranno tali scelte, sarà invece sempre modificato il primo valore di controllo, causando quindi almeno il cambio della schermata; quando, in tutti i tipi di procedura, i citati tasti saranno premuti dalla schermata principale, sarà reso positivo anche il secondo valore, così da causare la fine dell'elaborazione.

Questa breve introduzione teorica, lungi dal voler chiarire il funzionamento del codice che segue, serve però a fornire almeno le chiavi di lettura per coloro che non avessero mai avuto modo di confrontarsi con questo tipo di elementi.

Come sempre, sarà il collaudo a chiarire, più e meglio di molte parole, il funzionamento del tutto, e la buona notizia è che dovrete aspettare per questo ancora davvero molto poco.

Esercizio 14.5.2. La funzione ElaboraDato.

FileScript. Default.JSS

Nome. ElaboraDato

Descrizione. Propone una procedura guidata, sulla base dei dati registrati per la categoria memorizzata.

Ritorni. Di tipo Void. Nessuno.

Parametri.

1. sSuffisso. L'estensione, o il nome del file corrente, cui si riferiscono i dati registrati. Di tipo String.

2. iAiuto. Se valorizzato con True, attiva l'omonima fase. Di tipo Int.

Novità.

1. Le nostre funzioni "InizializzaProcedura ()", "VociCampo ()", "CreaVoci ()","ControllaProgrammato ()", "UscitaProcedura ()", "ScelteProcedura ()", "AggiornaArchivio ()" e "FineElaborazione ()".

Fasi.

1. Una prima semplice struttura di controllo verifica se esistono i dati per configurare la procedura; se così non è, saranno creati; se però in essi vi è un qualche errore, e non si conferma il loro aggiornamento, si chiama la nostra funzione d'uscita ed il flusso viene interrotto.

2. Una seconda struttura controlla che i dati per il singolo campo della procedura analizzata siano validi, tramite la nostra funzione "InizializzaProcedura ()"; se si verifica un errore, s'interrompe il flusso.

3. Dopo aver azzerato il relativo valore, si entra nel ciclo principale, dove si controlla dapprima se siano validi, stavolta, i dati per la singola schermata; anche in questo caso, se è stata riscontrata qualche irregolarità, il flusso viene interrotto.

4. Si entra poi nel ciclo secondario, dopo averne azzerato il valore d'ingresso; qui, si controlla dapprima che vi siano delle voci da visualizzare, tramite la nostra funzione "VociCampo ()", altrimenti viene data la possibilità di inserirle direttamente; qualora si verificasse un qualche errore, o si rinunciasse all'inserimento, si fermerebbe il flusso.

5. Un'ulteriore struttura si occupa di presentare la finestra di scelta, che sarà preceduta dal richiamo delle nostre funzioni "CreaVoci ()" e "ControllaProgrammato ()",a meno che non si sia impostato un valore per il suo salto; in quest'ultimo caso, ci si limita ad annullare tale valore, ed impostarne uno per simulare la pressione del tasto Invio alla finestra di dialogo.

6. La struttura successiva gestisce le scelte operate, o soltanto simulate, nella finestra di dialogo; nella prima via della struttura si controlla la pressione del tasto Escape, tramite la nostra funzione "UscitaProcedura ()", la quale in realtà abbandona l'elaborazione solo se ci si trova nella schermata principale, altrimenti si tornerà a quest'ultima; nella seconda via della struttura, invece, la nostra funzione "ScelteProcedura ()" gestisce la pressione di tutti gli altri tasti, interrompendo l'elaborazione solo nel caso in cui si sia prima avviata l'attesa dei tasti di attivazione negli script a gestione personale.

7. In un ulteriore controllo, poi, se risulta che almeno un dato di uno script a gestione personale sia stato modificato, viene chiamata la nostra funzione "AggiornaArchivio ()" per registrare tale variazione.

8. Usciti dal ciclo secondario, l'unica impostazione che si attua è l'azzeramento del valore sull'avvio ritardato della sintesi, i cui messaggi saranno quindi nuovamente pronunciati in modo immediato.

9. Usciti anche dal ciclo principale, se il valore di controllo dei cicli era stato impostato, tramite la nostra funzione "FineProcedura ()", si determina l'azione che si deve compiere all'uscita dalle fasi di scelta, chiamando una delle funzioni relative alla categoria elaborata.

Note.

1. Per individuare più facilmente i cicli "While-EndWhile", si è lasciata una riga vuota prima dell’istruzione di azzeramento del valore di controllo, la quale precede il comando iniziale del ciclo, e dopo il suo comando di chiusura.

2. Nonostante la lunghezza della funzione, e soprattutto la sua complessità, si è riusciti ad utilizzare solo un paio di variabili locali, grazie al sistematico uso di quelle globali.

Codice.

Void Function ElaboraDato (string sSuffisso, int iAiuto)
Var
String sVoci, ; elenco effettivo proposto a video
String sTitolo; titolo composto per la finestra di dialogo principale

If !ArchivioDati () Then; se il file di configurazione è mancante o incompleto,
PronunciaUscita (); esegue delle operazioni di chiusura, leggendo la riga corrente,
Return; e interrompe il flusso
EndIf; fine controllo file configurazione
If !InizializzaProcedura (sSuffisso) Then; se i settaggi sono falliti,
Return; interrompe il flusso
EndIf; fine controllo iniziale

Let gnUscita = FALSE; azzera il valore per consentire l'ingresso nel ciclo
While !gnUscita; continua finché il valore rimane a zero
If !DatiSchermata () Then; se i dati non sono stati memorizzati,
Return; interrompe il flusso
EndIf; fine controllo presenza dati

Let gnAggiorna = FALSE; azzera il valore per consentire l'ingresso nel ciclo
While !gnAggiorna && !gnUscita; continua finché entrambi i valori rimangono azzerati
If !VociCampo () Then; se il caricamento delle voci non si è concluso regolarmente,
Return; interrompe il flusso
EndIf; fine controllo voci e campo procedura
Let sVoci = CreaVoci (); genera l'elenco da proporre a video
If sVoci ; se l'elenco delle voci non è vuoto,
&& (gnTipo <= SECONDA ; e si è nei primi due tipi di procedura,
|| !gnSalta) Then; oppure, non è stato indicato il salto della scelta voce,
Let gsVoce = StringSegment (sVoci, BELL, gnVoce); memorizza la voce corrente
ControllaProgrammato (); verifica se spegnere e riattivare in modo programmato la sintesi
Let sTitolo = AggiungePunto (TroncaTesto (gsTitolo)); prende la prima parte del titolo globale
; propone la finestra di dialogo principale
Let gnValore = DlgSelectItemInList (sVoci, sTitolo, FALSE, gnVoce, gsEtichette, gnTasto)
Let gnStato = ControllaSintesi (FALSE, TRUE); spegne la sintesi, con l'azzeramento del buffer
Else; altrimenti, se si è nella elaborazione a più campi, e si è indicato di saltare la scelta,
If !gnValore Then; se si è al primo passaggio, ed il valore è a zero,
Let gnValore = PRIMA; simula la selezione della prima voce
EndIf; fine controllo voce attiva
Let gnTasto = -2; imposta un valore negativo, per consentire il passaggio al livello successivo
Let gnSalta = FALSE; annulla l'indicazione di salto
EndIf; fine controllo tipo procedura
If !gnValore Then; se si è abbandonata la procedura,
If UscitaProcedura ()Then; se la conclusione della procedura è stata confermata,
Return; interrompe il flusso
EndIf; fine controllo conclusione
Else; altrimenti, in tutti gli altri casi,
If !ScelteProcedura () Then; se si è scelto di immettere i tasti di attivazione degli script,
Return; interrompe il flusso
EndIf; fine controllo scelte possibili
EndIf; fine controllo scelta
EndWhile; fine ciclo schermata

Let gnStato = FALSE; azzera il valore, per la riattivazione incondizionata della sintesi
If gsCategoria == SCRIPTS ; se si stanno elaborando gli script a gestione personale,
&&gnCampo == PRIMA ; e ci si trova nella prima schermata,
&& gnCambiati Then; e se, infine, uno script è stato appena rinnovato, almeno in un suo campo,
AggiornaArchivio (); controlla la presenza dei dati per lo script nell'archivio personale
EndIf; fine controllo nuovi dati negli script
EndWhile; fine ciclo elaborazione campi

If gnUscita Then; se la procedura si è chiusa con una conferma delle impostazioni,
FineElaborazione (); esegue le azioni conclusive della procedura
EndIf; fine controllo uscita
EndFunction

Collaudo.

1. Se dopo la compilazione è tutto a posto, portate ancora un po' di pazienza: solo qualche altro script, e poi finalmente proveremo a far funzionare la nostra procedura.

Esercizio 14.5.3. Lo script TitoloFinestra.

FileScript. Default.JSS

Nome. TitoloFinestra

Sommario. Gestisce la lettura del titolo della finestra corrente.

Descrizione. Nelle finestre di dialogo di Jaws, se la variabile globale gsTitolo non è vuota, ne viene pronunciato il suo contenuto, o solo la sua prima parte qualora vi sia registrato un carattere Pipe, Ascii 124; altrimenti, in tutti gli altri casi, viene eseguito lo script nativo.

TastiAttivazione. Insert+T

Novità.

1. Lo script nativo "SayWindowTitle", (LeggiTitoloFinestra), il quale pronuncia il titolo della finestra corrente.

Note.

1. Questo script svolge un doppio compito: se il controllo sulle condizioni poste è positivo, viene pronunciato un contenuto memorizzato in una nostra variabile globale, altrimenti sarà eseguito lo script di Jaws "SayWindowTitle ()", quello che in origine è abbinato alla combinazione "Insert+T".

2. Per questo motivo, durante la creazione dello script, quando noi daremo la citata combinazione come tasti per attivarlo, alla richiesta di conferma alla sovrascrittura dovremmo quindi cliccare su "Ok", così da togliere allo script nativo la possibilità di intervenire con questa combinazione tasti.

Codice.

Script TitoloFinestra ()
If InHJDialog () ; se si è in una finestra di dialogo di Jaws,
&& gsTitolo Then; e un titolo per tale finestra è stato impostato,
; pronuncia la prima parte del titolo memorizzato, aggiungendovi un carattere Punto
SayMessage (OT_HELP, AggiungePunto (TroncaTesto (gsTitolo)))
Else; altrimenti, in tutti gli altri casi,
PerformScript SayWindowTitle(); attiva lo script nativo
EndIf; fine controllo finestra
EndScript

Collaudo.

1. Se la compilazione va a buon fine, come collaudo provate a premere la combinazione "Insert+T", in una qualsiasi finestra , ma per il momento vi dovrebbero essere recitate le normali informazioni fornite in questi casi. Quelle da noi impostate in una variabile globale, invece, saranno pronunciate in un'altra situazione, un paio di elementi più avanti, mentre staremo testando la nostra procedura di elaborazione guidata.

Esercizio 14.5.4. Lo script ElaboraElementoRicerca.

FileScript. Default.JSS

Nome. ElaboraElementoRicerca

Sommario. Avvia la procedura di elaborazione degli elementi di ricerca.

Descrizione. Chiama la funzione che gestisce le procedure guidate, la quale consente in questo caso di elaborare gli elementi di ricerca disponibili per i documenti con l'estensione di quello corrente.

TastiAttivazione. Windows+0

Note.

1. Non vi è nessuna novità in questo script, perché dal suo interno chiameremo la solita funzione di gestione, la quale ricaverà come sempre le necessarie istruzioni dal nome stesso dello script; è invece importante evidenziare l'utilizzo della combinazione suggerita, soprattutto il fatto di aver premuto il tasto "Windows" assieme al numero 0, perché proprio questo suffisso numerico sarà la costante che riguarderà anche gli altri tasti scelti per avviare le procedure guidate.

Codice.

Script ElaboraElementoRicerca ()
GestisceDato (); chiama l'apposita funzione
EndScript

14.5.5. Il collaudo della procedura per la ricerca di stringhe predeterminate.

Eccoci dunque arrivati al momento tanto atteso: se avete compilato correttamente lo script, seguite questi passi:

1. Restate pure nell'Editor di Jaws, purché abbiate aperto un file script qualsiasi, con estensione ".JSS".

2. Premete i tasti di attivazione dello script appena compilato, "Windows+0", e la procedura dovrebbe visualizzare una finestra di dialogo con il seguente contenuto:

Nessun Elemento per l'estensione .jss
Immetterlo ora?

3. Il cursore sarà posizionato sul tasto "Ok", e quindi premendo Invio confermerete la nuova immissione. Si entrerà così in un campo dove poter scrivere, e la finestra di dialogo avrà stavolta questi messaggi:

Aggiungere l'Elemento in posizione 1.
Invio conferma, Esc annulla.

4. Inserite il termine "Script", senza virgolette e lasciando dopo uno spazio, quindi premete Invio. Si aprirà così la schermata di scelta della nostra procedura guidata, la quale avrà il seguente titolo:

Selezionare l'elemento da elaborare, e Cliccare sull'azione da compiere

5. Il cursore sarà posizionato sulla prima voce dell'elenco, che avrà il seguente testo:

1. Script

14.5.6. Sfruttiamo l'Aiuto in linea.

Adesso, pur avendo una sola voce nell'elenco, abbiamo una serie di opzioni possibili. Senza spendere altre parole, approfittiamo del molto lavoro fin qui fatto, leggendo le informazioni che ci fornisce l'Aiuto in linea, quello che abbiamo aggiornato nell'undicesimo capitolo.

Seguite allora questi passi:

1. Premete i tasti di attivazione dell'Aiuto in linea, "Windows+H". Sarà visualizzata una finestra informativa, il cui contenuto sarà il seguente:

Informazioni sulla finestra di dialogo:

Selezionare l'elemento da elaborare, e Cliccare sull'azione da compiere.
Pulsanti disponibili:
Modifica Elemento. Alt+M.
Aggiunge Elemento. Alt+I.
Elimina Elemento. Alt+L.
Sposta giù. Alt+G.
Sposta su. Alt+S.
Avvia ricerca. Ok, oppure Alt+O.
Annulla. Esc, oppure Alt+A.
Visualizza questa schermata d'Aiuto. Windows+H.

Premere Escape per chiudere questo messaggio.

2. Essendosi proposta una schermata del Visualizzatore virtuale, possiamo già muoverci tra le informazioni con i tasti freccia. Come potete esaminare, dall'alto in basso, sono elencati tutti i tasti che hanno una qualche funzione dentro alla finestra di scelta della procedura. Così come l'Aiuto in linea sugli script attivi, queste righe di informazione sono anche dei link, che si possono cliccare direttamente con Invio per eseguirne la funzione descritta.

3. Approfittiamo di questa opzione, e cerchiamo nella schermata d'aiuto la riga che contiene "Aggiunge Elemento. Alt+I.", e premiamo Invio.

4. Si tornerà nel campo d'editazione precedente, dove saremo chiamati ad inserire la voce contrassegnata dal numero 2. qui dunque inseriamo "& Function", anche in questo caso senza virgolette e rispettando gli spazi lasciati prima e dopo la parola chiave delle funzioni. Fondamentale sarà porre il carattere E Commerciale prima del termine, ma separato da uno spazio, che sta ad indicare che questa stringa che noi abbiamo immesso dovrà essere cercata all'interno della riga, non dal suo inizio. Una volta certi di aver inserito il testo corretto, premete Invio per confermare l'inserimento.

5. Aggiungete ancora una voce, premendo "Alt+I". Quando si aprirà il campo d'editazione, inserite stavolta la stessa parola chiave di prima, ma senza né la E Commerciale, né lo spazio iniziale, conservando però il secondo spazio, scrivendo "Function", quindi premete Invio.

6. Una volta tornati alla finestra di scelta, e posizionati sulla terza voce appena inserita, premete Invio, avviando così la ricerca che, se tutto va bene, dovrebbe concludersi sull'intestazione del primo elemento di codice verso il basso.

7. In realtà, essendo noi dentro all'Editor di Jaws, ci siamo mossi sfruttando ancora la funzione nativa per lo spostamento all'elemento di codice successivo, "F2", esattamente come avremmo fatto anche con la precedente versione dello script "MuoveElementoSuccessivo ()", che se ricordate si attiva con "Windows+FrecciaGiù". se volete quindi sfruttare quanto fatto per utilizzare la stessa combinazione anche in altri applicativi, dobbiamo aggiornare in modo definitivo il citato script, e l'altro suo contrario.

Esercizio 14.5.7. La versione definitiva di MuoveElementoSuccessivo ().

FileScript. Default.JSS

Nome. MuoveElementoSuccessivo

Sommario. Si muove all'elemento successivo.

Descrizione. Nella finestra principale dell'Editor di Script, esegue i comandi nativi per spostarsi all'elemento di codice successivo; in tutte le altre finestre di editazione, muove al successivo elemento di ricerca tra quelli registrati per l'estensione del documento corrente

Note.

1. La modifica alla versione precedente di questo script, ed a quella che segue, si attua svuotando tutto il contenuto tra l'intestazione ed il comando di chiusura, ponendo il solo richiamo alla nostra funzione di gestione; in caso di dubbi, esaminare la forma indicata di seguito, o nello spazio di codice dello script che segue immediatamente questo.

Codice.

Script MuoveElementoSuccessivo ()
GestisceDato (); chiama l'apposita funzione.
EndScript

Collaudo.

1. Dopo aver compilato correttamente, poiché le regole per l'attuale script valgono anche per il successivo, attendete quindi di modificare anche il prossimo codice, prima di effettuare il collaudo di entrambi.

Esercizio 14.5.8. La versione definitiva di MuoveElementoPrecedente ().

FileScript. Default.JSS

Nome. MuoveElementoPrecedente

Sommario. Si muove all'elemento Precedente.

Descrizione. Nella finestra principale dell'Editor di Script, esegue i comandi nativi per spostarsi all'elemento di codice Precedente; in tutte le altre finestre di editazione, muove al Precedente elemento di ricerca tra quelli registrati per l'estensione del documento corrente

Codice.

Script MuoveElementoPrecedente ()
GestisceDato (); chiama l'apposita funzione.
EndScript

Collaudo.

1. Se per la compilazione non ci sono problemi, semplicemente, da dentro l'Editor di Script premete i tasti "Windows+FrecciaGiù ()", e "Windows+FrecciaSu ()"; dovreste passare, nell'ordine, all'elemento di codice, script o funzione che sia, successivo o precedente.

2. Se vi sembra che nulla negli effetti degli script sia cambiato, avete proprio ragione: di diverso da prima, quando avevamo l'altra versione che chiamava direttamente in causa i comandi nativi, c'è solo che ora tali comandi sono attivati dalla nostra funzione "MuoveDato ()", a sua volta chiamata dalla nostra "GestisceDato ()", che abbiamo inserito nel corpo degli script appena aggiornati.

3. Per poter esaminare qualcosa di nuovo, quindi, proseguite con il prossimo titolo.

14.5.9. Le stringhe memorizzate per estensione.

I tre elementi di ricerca che abbiamo memorizzato da dentro l'Editor di Jaws, non sono stati registrati per questo particolare applicativo, bensì per tutti i documenti che abbiano un'estensione ".JSS". Questo fa sì che, appunto, qualsiasi file con tale estensione, essendo un semplice file di testo, può essere ad esempio aperto con il Blocco Note e, grazie alla nostra funzione, possiamo replicare anche in quell'ambiente il passaggio all'elemento di codice successivo o precedente usando, ovviamente, gli stessi comandi usati dentro all'Editor.

Per fare una prova pratica di quanto affermato, seguite questi passi.

1. Chiudete l'Editor di Script, ed andate nella cartella in cui sono presenti i file con le impostazioni dell'Utente, servendovi degli appositi collegamenti tra le Utilities di Jaws.

2. Qui selezionate un qualsiasi file script, quelli con estensione ".JSS", purché non sia quello predefinito "Default.JSS", e soprattutto che abbia un certo numero di script e funzioni, in modo da poter rapidamente passare dall'uno all'altro. L'importante è che, così come avevamo fatto nell'undicesimo capitolo, lo apriate non cliccandoci sopra, bensì selezionando il comando "Apri con..." e, tra le varie opzioni proposte, clicchiate sul Blocco Note o su Wordpad, o comunque un qualsiasi altro editor testuale in cui abbiate registrato una finestra di Editing.

3. Una volta aperto il file script con tale applicativo, che non deve quindi essere l'Editor di Jaws, potrete agire sulle combinazioni tasti per andare al successivo e precedente elemento di ricerca, "Windows+FrecciaGiù" e "Windows+FrecciaSu".

4. Se tali elementi non sono nelle vicinanze, dopo circa tre secondi sentirete un avviso che la ricerca è in corso, avvertendovi di premere il tasto Escape per interromperla. Quando uno script o una funzione è rilevata dalla procedura, la ricerca si arresta emettendo un segnale acustico, e leggendo dalla parola chiave individuata sino a fine riga. Se invece si arriva ad uno degli estremi del documento, senza più incontrare alcun elemento di codice, sentirete l'avviso di essere giunti alla fine o all'inizio del documento corrente.

14.5.10. La ricerca dei singoli elementi.

Forse la ricerca di stringhe predeterminate per l'estensione ".JSS" può non apparire molto utile, in quanto i file script sono aperti quasi sempre con l'Editor di Jaws, che prevede già questo modo rapido di spostarsi tra gli elementi di codice. Se però noi volessimo raggiungere rapidamente non l'intestazione, bensì i comandi di chiusura di script e funzioni, oppure, l'inizio o la fine di un ciclo "While-EndWhile", o l'inizio o la fine di un ciclo "For-EndFor", ecco che la nostra procedura può rivelarsi indispensabile, anche nei documenti con estensione "JSS".

Per capire come fare, tuttavia, dovremmo dotarci di due serie di script, come quelle create nell'undicesimo capitolo. A tale scopo, se ricordate, ci basterà realizzare solo il primo esemplare, e poi lasciando che Jaws rielabori per noi gli script rimanenti.

Esercizio 14.5.11. Lo script MuoveSingoloSuccessivo1.

FileScript. Default.JSS

Nome. MuoveSingoloSuccessivo1

Sommario. Cerca il prossimo elemento 1.

Descrizione. Attiva la ricerca del successivo elemento tra quelli registrati per l'estensione del documento corrente, e identificato dal numero 1.

TastiAttivazione. Windows+1

Note.

1. Il tasto di attivazione scelto per attivare questo script, così come tutti gli altri che saranno utilizzati per la serie di script che andremo a creare, "Windows" più una cifra da 1 a 9, nel sistema operativo avrebbero già una loro funzione, che è quella di richiamare l'applicazione presente nell'apposita barra con il numero usato dopo il tasto "Windows"; a prescindere da quanto siano utilizzate tali scelte rapide, all'interno della funzione "MuoveDato ()", si è predisposto che, nel caso si prema il tasto "Windows" assieme ad uno dei tasti numerici da 1 a 9, qualora non vi sia registrato alcun elemento di ricerca per quell'estensione, si attivi comunque la funzione originale del tasto.

Codice.

Script MuoveSingoloSuccessivo1 ()
GestisceDato (); chiama l'apposita funzione.
EndScript

Collaudo.

1. Dopo aver compilato correttamente, posizionatevi dentro al corpo dello script, e premete "Shift+Control+Windows+P", per attivare lo script "CreaSerie ()".

2. Nella finestra di dialogo che compare, confermate con Invio la scelta del valore 9 come numero di suffisso dell'ultimo script da creare, quindi confermate ulteriormente la creazione degli script proposta, quindi attendete la conclusione della procedura di generazione degli script.

3. Per fare una prima prova parziale degli script creati, tornate al primo script della serie, "MuoveSingoloSuccessivo1 ()", e premete la combinazione "Windows+1". Sarete così posizionati sull'intestazione del successivo script, in quanto avrete cercato solo l'elemento di ricerca che avevamo registrato come numero 1, che era appunto la parola chiave "Script".

4. Se volete, premete ancora un paio di volte la stessa combinazione, spostandovi così alle intestazioni degli script successivi. Siccome così facendo non avreste un comportamento diverso da quello che potreste avere premendo la ricerca dell'elemento successivo, provate allora a premere la combinazione "Windows+2", la quale cerca a sua volta l'elemento di ricerca registrato con il numero 2, e quindi la parola chiave "Function".

5. Dato che dovreste essere posizionati in mezzo agli script della serie appena creata, e da lì alla fine dello script non dovrebbe esserci alcuna funzione, la ricerca non dovrebbe avere alcun esito, continuando a scorrere verso il basso sino alla conclusione del file script predefinito.

6. A questo punto, si potrebbe pensare di trovare un modo per ripetere la singola ricerca anche all'indietro, ma di questo si occuperà la prossima serie di script che andremo ora a realizzare.

Esercizio 14.5.12. Lo script MuoveSingoloPrecedente1.

FileScript. Default.JSS

Nome. MuoveSingoloPrecedente1

Sommario. Cerca il precedente elemento 1.

Descrizione. Attiva la ricerca del precedente elemento tra quelli registrati per l'estensione del documento corrente, e identificato dal numero 1.

TastiAttivazione. Shift+Windows+1

***

Per ulteriori spiegazioni, scrivere a:
Abramo Volpato, oppure, a: Nunziante Esposito



Torna alla pagina iniziale della consultazione delle riviste

Oppure effettua una ricerca per:


Scelta Rapida