L'oggetto Selection e... qualcos'altro
In questo tutorial tratteremo, per molti sarà un ripasso, i seguenti argomenti:
Funzioni di callback a singola riga
Evento onChanged della classe TexfField
Creazione di riferimenti relativi
Iterazioni con i cicli while e for
Oggetto Selection
Creazione dei listener
Azioni ripetute con setInterval
Spiegheremo questi argomenti partendo subito dal progetto
allegato.
Il progetto consente di visualizzare sotto forma di elenco
nel campo di testo dinamico out_txt, i caratteri inseriti nel
campo di testo di input in_txt.
E’ possibile poi visualizzare nel campo di testo
dinamico sel_txt, la selezione fatta in out_txt.
in_txt.onChanged = function () {
//create local references
var s = this.text;
var l = s.length;
var t = this;
var T$ = t._parent.out_txt;
a = [];
var n = -1;
while (++n Characters List" + n + "=============" + n + n;
for (var i = 0; i " + a[i] + "" + n;
}
};
Questo blocco di codice rappresenta la prima parte del
progetto, consente cioè di visualizzare in out_txt,
l’elenco dei caratteri inseriti in in_txt.
Il tutto è stato racchiuso in una funzione di
callback a singola riga detta anche funzione senza nome.
Queste funzioni le possiamo anche utilizzare per raggruppare
il codice in un'unica posizione, per esempio possiamo
raggruppare gli script di più pulsanti in modo da
accentrare il codice.
Invece per esempio di avere in ogni pulsante:
on(press){
//azioni
}
avremo:
pulsante1.onPress = function(){
//azioni
}
pulsante2.onPress = function(){
//azioni
}
In questo modo risulta più facile anche la correzione degli script.
Un altro utilizzo interessante è per esempio nel caso di una duplicazione a runtime di un clip pulsante.
for (var i = 0; i Characters List" + n + "=============" + n + n; for (var i = 0; i " + a[i] + "" + n; } };
Infine con il ciclo for vengono presi ad uno ad uno i caratteri dall’array con i quali si crea la stringa.
Si è scelto di allungare il codice, per spiegare meglio i concetti. Ovviamente esistono altri modi per eseguire queste operazioni.
Passiamo ora alla seconda parte del progetto, esaminando
l’oggetto Selection.
Selection fa parte delle Classi di livello superiore, quindi
non viene istanziata per il semplice fatto che come per il
puntatore del mouse, ci può essere una sola selezione.
myFocusEvent = new Object ();
myFocusEvent.onSetFocus = function () {
Selection.getFocus () == "_level0.out_txt" ? myInt = setInterval (sel, 10) : stopInt ();
};
Selection.addListener (myFocusEvent);
//Functions
function sel () {
var starSel = Selection.getBeginIndex ();
var endSel = Selection.getEndIndex ();
var s$ = out_txt.text.substring (starSel, endSel);
sel_txt.text = s$;
}
function stopInt () {
clearInterval (myInt);
}
Per poter definire la sottostringa di selezione, è necessario che sia selezionata una sottostringa, quindi utilizzando i metodi getBeginIndex() e getEndIndex dell’oggetto Selection possiamo estrarre la selezione col metodo substring(indiceInizio,indiceFine) dell’oggetto String.
Il progetto fa proprio questo, prima però definisce un listener che possa rilevare quale campo di testo ha il focus attivo utilizzando il metodo Selection.getFocus() il quale restituisce come percorso assoluto il nome dell’istanza di campo di testo col focus correntemente attivo.
In questo modo alleggeriamo il lavoro del processore, in quanto la funzione sel() viene richiamata continuamente solo se è il campo out_txt ad avere lo stato attivo.
Non appena si verifica l’evento onSetFocus, Flash
controlla quale campo di testo ha il focus e quindi con la
funzione sel() estrae la sottostringa di selezione e la
assegna alla proprietà text del campo di testo
dinamico sel_txt,
Nella funzione di callback abbiamo usato l’operatore
ternario ?, il che equivale a scrivere:
if (Selection.getFocus () == "_level0.out_txt") {
myInt = setInterval (sel, 10);
} else {
stopInt ();
}
L’uso di setInterval consente di richiamare ricorsivamente una funzione e può essere un’alternativa al enterFrame().
Esaminiamo adesso la funzione sel().
Come abbiamo detto prima, utilizzando i metodi
dell’oggetto Selection getBeginIndex() e getEndIndex in
combinazione con substring(indiceInizio,indiceFine) possiamo
estrarre la sottostringa di selezione che assegniamo alla
variabile s$.
Infine s$ viene assegnata alla proprietà text del
campo dinamico sel_txt.
Ricordo le stringhe, come gli array, si basano su una
numerazione a base 0, quindi il primo carattere occupa la
posizione 0.
Provate ora il progetto.
Scrivete qualcosa nel campo di input, otterrete la
visualizzazione in lista dei caratteri inseriti, quindi
andate nel campo dinamico e selezionate una parte della
stringa, otterrete la visualizzazione della selezione nel
campo dinamico sel_txt.