L'oggetto Selection e... qualcos'altro
In questo tutorial tratteremo, per molti sarà unripasso, 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 progettoallegato.
Il progetto consente di visualizzare sotto forma di elenconel campo di testo dinamico out_txt, i caratteri inseriti nelcampo di testo di input in_txt.
E’ possibile poi visualizzare nel campo di testodinamico sel_txt, la selezione fatta in out_txt.
in_txt.onChanged = function () {//create local referencesvar 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 delprogetto, consente cioè di visualizzare in out_txt,l’elenco dei caratteri inseriti in in_txt.
Il tutto è stato racchiuso in una funzione dicallback a singola riga detta anche funzione senza nome.
Queste funzioni le possiamo anche utilizzare per raggruppareil codice in un'unica posizione, per esempio possiamoraggruppare gli script di più pulsanti in modo daaccentrare 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 correzionedegli script.
Un altro utilizzo interessante è per esempio nel casodi 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 icaratteri dall’array con i quali si crea la stringa.
Si è scelto di allungare il codice, per spiegaremeglio i concetti. Ovviamente esistono altri modi pereseguire queste operazioni.
Passiamo ora alla seconda parte del progetto, esaminandol’oggetto Selection.
Selection fa parte delle Classi di livello superiore, quindinon viene istanziata per il semplice fatto che come per ilpuntatore 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);//Functionsfunction 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, quindiutilizzando i metodi getBeginIndex() e getEndIndexdell’oggetto Selection possiamo estrarre la selezionecol metodo substring(indiceInizio,indiceFine)dell’oggetto String.
Il progetto fa proprio questo, prima però definisce unlistener che possa rilevare quale campo di testo ha il focusattivo utilizzando il metodo Selection.getFocus() il qualerestituisce come percorso assoluto il nome dell’istanzadi campo di testo col focus correntemente attivo.
In questo modo alleggeriamo il lavoro del processore, inquanto la funzione sel() viene richiamata continuamente solose è il campo out_txt ad avere lo stato attivo.
Non appena si verifica l’evento onSetFocus, Flashcontrolla quale campo di testo ha il focus e quindi con lafunzione sel() estrae la sottostringa di selezione e laassegna alla proprietà text del campo di testodinamico sel_txt,
Nella funzione di callback abbiamo usato l’operatoreternario ?, il che equivale a scrivere:
if (Selection.getFocus () == "_level0.out_txt") {myInt = setInterval (sel, 10);} else {stopInt ();} L’uso di setInterval consente di richiamarericorsivamente una funzione e può essereun’alternativa al enterFrame().
Esaminiamo adesso la funzione sel().
Come abbiamo detto prima, utilizzando i metodidell’oggetto Selection getBeginIndex() e getEndIndex incombinazione con substring(indiceInizio,indiceFine) possiamoestrarre la sottostringa di selezione che assegniamo allavariabile s$.
Infine s$ viene assegnata alla proprietà text delcampo dinamico sel_txt.
Ricordo le stringhe, come gli array, si basano su unanumerazione a base 0, quindi il primo carattere occupa laposizione 0.
Provate ora il progetto.
Scrivete qualcosa nel campo di input, otterrete lavisualizzazione in lista dei caratteri inseriti, quindiandate nel campo dinamico e selezionate una parte dellastringa, otterrete la visualizzazione della selezione nelcampo dinamico sel_txt.
