Traduzione letterale per "Implement
accessibility features", tratto direttamente dalla Study Guide di Lorenzo. Cosa significa? Beh, fate una prova: prendete
un'applicazione che avete scritto voi, trovate l'icona del file EXE
e selezionatela. No, non fate doppio-click, selezionatela e basta!
Adesso bendatevi gli occhi, per bene, cercate il tasto Invio/Enter sulla
tastiera e premetelo: se la vostra applicazione funziona correttamente, l'avete
appena aperta. Fin qua è facile, no?
Ora, provate ad usarla senza vedere un accidenti. Molte
persone, compreso (una volta) il buon vecchio nonno Costantino, vivono
quotidianamente così. Come ve la cavate voi??? Maluccio, non è vero? Possiamo migliorare
le cose? Beh, un pochino (ma molto poco), io ho fatto qualche esperimento e ve
lo riporto.
Siccome mi stanno a cuore i problemi dei non-vedenti, vediamo di migliorare
la fruibilità e la user-friendilabilità (come mi piace l'italiano ), del nostro software a questa categoria di
persone. Di quali strumenti abbiamo bisogno? Cosa dobbiamo fare? Beh,
innanzitutto, sappiate che Windows contiene un tool che è in grado di
leggere (questa è una parola grossa) tutto il testo che gli arriva sotto il
naso: pagine web, per esempio. Oppure, pronuncia le lettere man mano che le
digitate, e così via.
Questo tool, che io non avevo mai visto e l'ho scoperto oggi, si chiama Narrator,
e lo potete trovare in:
Start --> Programs --> Accessories -->
Accessibility --> Narrator
Come? Avete ancora la benda sugli occhi???
Beh, fate così, allora:
CTRL+ESC --> R --> scrivete "narrator"
--> premete Invio
Ho provato ad usare Windows con il Narrator aperto.
Francamente, sono stato un po' disorientato: sarà l'inglese letto della voce
sintetizzata, sarà qualcos'altro, ma non ho afferrato la logica. Provate ad
aprire Word mantenendo aperto il Narrator: sembra che
prima legga la barra del titolo, poi legga tutti i menù
(File, Edit, View, etc.), poi dice "Toolbar" una decina di volte e così via. Il testo
non lo legge mai, si ferma prima.....Provate poi ad aprire
Notepad, scrivete lentamente: il Narrator legge ogni singolo
tasto che premete.
Come si traduce sotto questo in .NET?
Possiamo fare in
modo che il Narrator legga ad alta voce qualcosa, per facilitare l'utilizzo a
chi non sta vedendo nulla? Vediamo un po'. La classe Control di
.NET espone alcune property proprio a questo scopo. Tutte
le classi che ereditano da Control,
ovviamente, espongono tali proprietà. Ok, benissimo, cosa fanno? A cosa servono?
Per capirlo, vediamo di usare la nostra applicazione tenendo aperto il
Narrator, giusto per capire come si comporta. Si può fare sia dall'IDE, che
direttamente dall'eseguibile, dipende da voi. Usiamo il TAB per
spostarci da un controllo all'altro sulla nostra WF: quando raggiungiamo il
button btnCalculate, cosa succede? Il Narrator parla e
dice:
"Calcola. Push Button to press. Use Space
Bar."
Ovviamente la stringa Calcola è letta all'inglese, ma non fa nulla.
Quello che ci interessa è la logica. Narrator leggere la property
Text del Button
, poi ci aggiunge
del suo, capendo che è un pulsante e via dicendo. E' così, secondo voi? FALSO!!!! NET espone la prima property interessante,
AccessibleRole, che indica il tipo di oggetto su
cui ci troviamo, e che Narrator userà per spiegare all'utente come interagire: con il
Button ci dice di usare la Space Bar, per esempio. Provate ad aprire il
sorgente, e date un'occhiata alla property AccessibleRole: è possibile impostare il tipo di
oggetto da un vasto elenco: CheckButton, ComboBox, List, MenuBar, Dialog, etc.
etc. Provate a cambiare valore, ricompilare e ad eseguire l'applicazione come
prima. Questa volta il Narrator dirà una cosa diversa, in base al tipo di
AccessibleRole
impostato. In questo modo, l'utente non-vedente sa come comportarsi quando il focus
è su un oggetto ben specifico: tipo di oggetto quale tasto usare, e
così via.
Questo nel caso in cui la property Text del Control sia valorizzata.
Cosa succede nel caso in cui la Text sia string.Empty? Il Narrator leggere la stringa
impostata nella seconda property interessante, ovvero
AccessibleName. Provate ad aggiungere un nuovo Button sulla WF,
lasciate la property Text vuota e scrivete qualcosa, tipo "This is a empty
button on this form!" in AccessibleRole. Ricompilate, eseguite, usate il
TAB fino a raggiungere il nuovo Button che avete appena aggiunto. Questa volta
il Narrator dirà:
"This is a empty button on this form! Push Button to press. Use Space
Bar."
Adesso il Narrator ha usato AccessibleName invece di Text. Sintatticamente,
quindi, possiamo indicare questo funzionamento in questo modo:
{ Control.AccessibleName | Control.Text } +
Control.AccessibleRole + Narrator.Other
In realtà, come si vede, il controllo su quello che Narrator dice l'abbiamo
solo in parte: Narrator.Other è un "qualcosa" che aggiunge lui (in attesa di
essere smentito, ovviamente). Esiste anche la property AccessibleDescription, ma
la sto ancora sperimentando...