Una funzionalità molto utile di Xojo è l’IDE Script. A volte è necessario effettuare delle operazioni sul proprio codice che sono decisamente noiose. La funzionalità dell’IDE Script di Xojo può renderle a volte semplici.
L’IDEScript permette di scrivere del codice per operare sull’IDE.
Si possono fare diverse operazioni in questo caso vediamo come poter effettuare semplicemente la classica assegnazione inversa.
Poniamo di avere in un metodo una sezione che legge i valori da un dictionary impostando dei valori in variabili (di una classe, di modulo, non è rilevante). Vogliamo scrivere la funzione inversa, vale a dire impostare un valore del dictionary al relativo valore della variabile. Qualcosa del tipo:
//Lettura MyLabelA.Text = myDictionary.value("A") //Scrittura myDictionary.value("A") = MyLabelA.Text |
Se abbiamo solo una riga ovviamente è banale, ma se ne abbiamo tante la cosa è decisamente noiosa.
Possiamo allora scrivere uno Script per l’IDE di Xojo che faccia il lavoro al posto nostro.
Dal menu selezioniamo e qui . Si apre una finestra in cui possiamo inserire il nostro codice. La funzione è abbastanza semplice:
function swapSelection(txt as String,swapOnChars as String) as String //Dividiamo il testo in righe dim v() as String=txt.split(endofline) dim r() as String for Each vv as String in v //Per ogni riga la dividiamo rispetto al gruppo di caratteri su cui la vogliamo invertire dim rr() as String=vv.split(swapOnChars) if rr.ubound>0 then //Se ci sono più elementi nel vettore dobbiamo invertire i primi due e poi riunire tutto il vettore dim temp as String=rr(0) rr(0)=rr(1) rr(1)=temp r.append join(rr,swapOnChars) else //Altrimenti non dobbiamo operare sulla riga r.append vv end if next //Restituiamo il testo in ingresso con le righe invertite return join(r,endofline) end function text= swapSelection(text," = ") |
Ora prendiamo il nostro metodo, copiamo dal metodo di “Lettura” le assegnazioni e incolliamo nel metodo di “Scrittura” in modo da avere ad esempio:
//Assegno al dictionary i valori dall'interfaccia MyLabelA.Text = myDictionary.value("A") MyLabelB.Text = myDictionary.value("B") MyLabelC.Text = myDictionary.value("C") MyLabelD.Text = myDictionary.value("D") MyLabelE.Text = myDictionary.value("E") MyLabelF.Text = myDictionary.value("F") MyLabelG.Text = myDictionary.value("G") MyLabelH.Text = myDictionary.value("H") MyLabelI.Text = myDictionary.value("I") MyLabelJ.Text = myDictionary.value("J") MyLabelK.Text = myDictionary.value("K") MyLabelL.Text = myDictionary.value("L") MyLabelM.Text = myDictionary.value("M") MyLabelN.Text = myDictionary.value("N") //Proseguo con il codice |
Dobbiamo invertire tutte queste assegnazioni. Per cui le selezioniamo, lanciamo lo script (che possiamo salvare e richiamare semplicemente o in test lanciare direttamente dalla finestra di editing) e otteniamo:
//Assegno al dictionary i valori dall'interfaccia myDictionary.value("A") = MyLabelA.Text myDictionary.value("B") = MyLabelB.Text myDictionary.value("C") = MyLabelC.Text myDictionary.value("D") = MyLabelD.Text myDictionary.value("E") = MyLabelE.Text myDictionary.value("F") = MyLabelF.Text myDictionary.value("G") = MyLabelG.Text myDictionary.value("H") = MyLabelH.Text myDictionary.value("I") = MyLabelI.Text myDictionary.value("J") = MyLabelJ.Text myDictionary.value("K") = MyLabelK.Text myDictionary.value("L") = MyLabelL.Text myDictionary.value("M") = MyLabelM.Text myDictionary.value("N") = MyLabelN.Text //Proseguo con il codice |
Ovviamente bisogna ricordarsi che questa funzione opera su tutto il testo del metodo.