Troppe opzioni sono un male… inevitabile?
… soprattutto se si parla di scorciatoie da tastiera.
L’utente pretende le stesse possibilità di scelta di un programma Office, e lo sviluppatore deve spesso trovare il metodo meno sanguinoso possibile per gestire il tutto, partendo dal presupposto che “non si può fare” non sempre è una risposta accettabile.
FileMaker Pro mette a disposizione una funzione di ricavo – Get ( TastiModificatoreAttivo ) – che restituisce quali tasti sono in quel momento premuti dall’utente. I risultati sono illuminanti:
Maiusc = 1
Bloc Maiusc = 2
Ctrl = 4
Alt (Windows) e Opzione (OS X) = 8
Comando (OS X) = 16
Nel caso in cui più tasti siano premuti insieme, il sistema restituisce la somma: ad esempio la combinazione crtl-maiuscolo restituisce un valore di 5.
Si tratta quindi di trovare il modo migliore per intercettare quali tasti sono premuti con il minore spreco di tempo.
È proprio il caso di dire che la matematica non è un’ opinione: tutti i risultati sono potenze di 2 (1= 20, 2= 21, 4= 22, 8= 23,16= 24).
Questo ci può aiutare a trovare una soluzione semplice ed elegante. Un’applicazione divertente è spiegata qui: viene creata una funzione personalizzata (get.modifierKeys) utilizzando la funzione Modulo() e Divisore() per ricavare tutti i tasti premuti partendo dall’esponente 0 per arrivare all’esponente 4:
Dichiara( [
_modKeys = Get( TastiModificatoreAttivo );
_returnValue = _modKeys; $$SHIFT = Modulo( _modKeys; 2 );
_modKeys = Divisore( _modKeys; 2 );
$$CAPS = Modulo( _modKeys; 2 );
_modKeys = Divisore( _modKeys; 2 );
$$CTRL = Modulo( _modKeys; 2 );
_modKeys = Divisore( _modKeys; 2 );
$$ALT = Modulo( _modKeys; 2 );
_modKeys = Divisore( _modKeys; 2 );
$$CMD = Modulo( _modKeys; 2 ) ];
_returnValue )
La funzione non richiede parametri, e ridichiara la variabile _modKeys per ciascuno degli esponenti, ricavando il risultato. Ma dato che Modulo() è una funzione logica e restituisce un risultato booleano (1 o 0) può essere utilizzata per dichiarare una variabile globale che a sua volta è utilizzabile anche negli script. In questo la funzione è esemplificativa di un concetto poco conosciuto: è possibile dichiarare le variabili direttamente dal motore di calcolo di FileMaker, senza utilizzare l’istruzione di script imposta variabile[].
Arrivati a questo punto il gioco è semplice. È sufficiente inserire negli script interessati un if [] del tipo:
Imposta Variabile [$Keys; Valore: get.modifierKeys]
If [$$CTRL and $$CMD];
… una serie di istruzioni …
ElseIf [$$SHIFT];
… altra serie di istruzioni …
ElseIf [$$CMD];
…etc…
End If
E tu come gestisci le scorciatoie da tastiera?