Quanto segue è stato testato su LibreOffice 4.2.6.3, ma dovrebbe funzionare senza problemi anche con altre versioni di LibreOffice / OpenOffice.
Creiamo un documento contenitore
Possiamo salvare il codice della nostra miniapplicazione sia nell'ambito del nostro spazio di lavoro personale sia in specifici documenti. Se vogliamo poter utilizzare ovunque il nostro codice, dovremo scegliere la seconda opzione.Quindi, partiamo con il salvare un documento Calc (un foglio elettronico) con un nome, come ad esempio ProgrammareLOconVB.ods. Questo documento conterrà i nostri dati ma anche il codice che scriveremo e le finestre di dialogo che prepareremo.
Creare una finestra di dialogo
Per creare una finestra di dialogo, fare clic su Strumenti / Macro / Organizza finestre di dialogo....Ci appare una finestra in cui possiamo lavorare con le nostre finestre di dialogo. Visto che ancora non ne abbiamo una, dobbiamo:
1. selezionare il contenitore Standard del documento su cui stiamo lavorando;
2. fare clic su Nuovo...;
3. assegnare un nome alla finestra di dialogo (ad esempio, ShoppingListManager);
4. fare clic su Modifica.
Si dovrebbe aprire l'editor delle finestre di dialogo, come nella seguente immagine:
Abbiamo a disposizione un insieme di controlli che potremo disporre nella finestra:
Se per caso non dovesse comparire, fare clic su Visualizza / Barre degli strumenti / Casella degli strumenti.
Aggiungere qualche controllo
Nella finestra di dialogo, aggiungiamo tre controlli, per preparare un esempio semplice: vogliamo una casella di testo in cui l'utente possa preparare una lista della spesa, scrivendo degli elementi in una casella di testo che verranno via via aggiunti alla lista (alla pressione di un pulsante).Quando si seleziona un controllo, nella parte sinistra della finestra compare una scheda dove si possono definire le diverse proprietà. Attribuiamo un nome ai nostri tre controlli e impostiamo altre proprietà che desideriamo. Per selezionare la finestra di dialogo e cambiarne le proprietà, bisogna fare clic sul suo margine esterno.
Il risultato finale potrebbe essere simile al seguente:
Sono stati attribuiti i seguenti nomi ai controlli:
- txtItem
- cmdAddToItem
- lstShoppingList
Far apparire la finestra
Il codice per far apparire la finestra, come riportato nel wiki di OpenOffice, è il seguente:Dim oDialog AS Object
Sub StartShoppingListManagerDialog
Dim oLibContainer As Object, oLib As Object
Dim oInputStreamProvider As Object
Const sLibName = "Standard"
Const sDialogName = "ShoppingListManager"
' library container
oLibContainer = DialogLibraries
' load the library
oLibContainer.loadLibrary( sLibName )
' get library
oLib = oLibContainer.getByName( sLibName )
' get input stream provider
oInputStreamProvider = oLib.getByName( sDialogName )
' create dialog control
oDialog = CreateUnoDialog( oInputStreamProvider )
' show the dialog
oDialog.execute()
End Sub
Dove dobbiamo inserirlo? In un modulo, naturalmente. Nel documento Calc, fare clic su Strumenti / Macro / Organizza macro / LibreOffice Basic....
Selezionare il documento Calc, e fare clic su Nuovo. Viene chiesto un nome per il modulo. Possiamo confermare il nome Modulo1.
Sostituire il codice presente con quello riportato qui sopra. Si dovrebbe ottenere qualcosa di simile a questo:
Siamo pronti per far apparire la finestra di dialogo. È sufficiente, nel foglio di lavoro, fare clic su Strumenti / Macro / Esegui macro..., selezionare la macro StartShoppingListManagerDialog e fare clic su Esegui.
Se vogliamo, possiamo aggiungere un pulsante e un gestore di eventi al foglio elettronico Calc, in modo da velocizzare l'operazione. In Calc, far visualizzare i controlli per formulario (Visualizza / Barre degli strumenti / Controlli per il formulario), selezionare tra essi il pulsante e posizionarlo nel foglio di lavoro. Facendoci clic con il pulsante destro del mouse, si attiva la scheda per la definizione delle proprietà e degli eventi. Impostare un nome e un testo da far comparire; poi, nella scheda eventi, associare all'evento "Eseguire l'azione" la procedura di avvio della finestra di dialogo.
Attenzione: per poter provare il funzionamento del pulsante che abbiamo definito, bisogna fare clic su Modo bozza (sì/no) della barra degli strumenti Controlli del formulario.
Gestire gli eventi della finestra
Nella finestra di dialogo, possiamo associare al pulsante una macro per gestire l'evento "Eseguire l'azione". Visto che desideriamo che il valore presente nel campo di testo venga aggiunto alla lista, il codice sarà simile al seguente:Sub cmdAddToList_click
Dim txtItem as Object, lstShoppingList as Object
txtItem = oDialog.getControl("txtItem")
lstShoppingList = oDialog.getControl("lstShoppingList")
lstShoppingList.addItem(txtItem.Text, lstShoppingList.getItemCount())
txtItem.setText("")
txtItem.setFocus()
End Sub
Dovremo poi associare la macro all'evento "Eseguire l'azione" del pulsante, come visto precedentemente.
Ulteriori informazioni
Una descrizione degli eventi gestibili per i vari controlli è disponibile nel wiki di LibreOffice.Informazioni sulle proprietà e i metodi di caselle di riepilogo e caselle di testo sono nel wiki di OpenOffice.
Quando un oggetto viene istanziato, è possibile verificarne a tempo di esecuzione quali sono le sue proprietà, i suoi metodi e le sue interfacce.
Ad esempio, avendo a disposizione il nostro oggetto txtItem, potremo aggiungere al nostro codice
MsgBox txtItem.dbg_methods
MsgBox txtItem.dbg_supportedInterfaces
MsgBox txtItem.dbg_properties
e far comparire i messaggi informativi che ci servono.
Note sulla sicurezza
L'esecuzione di una macro di cui non si conosce la provenienza è potenzialmente pericolosa. Per questo motivo, in LibreOffice / OpenOffice è disattivata.Facendo clic su Strumenti / Opzioni / LibreOffice / Sicurezza e poi sul pulsante Sicurezza delle macro... viene offerta la possibilità di configurare il livello appropriato. Se si ricevono documenti con delle macro, ricordarsi di controllarne sempre il contenuto prima di eseguirle (impostando il livello di sicurezza su "Medio", all'apertura del documento viene chiesto se si vogliono eseguire, e potremo rispondere di no per dare un'occhiata al codice).
Esportazione del codice sorgente
Se si desidera esportare il codice sorgente di un'applicazione, ad esempio per utilizzare un sistema di controllo di versione, è possibile sfruttare il fatto che i file ods sono semplici file zip con all'interno dei documenti XML. In particolare, troveremo all'interno del file ods un file XML per ogni modulo visual basic e per ogni finestra di dialogo impostata.File di esempio
Il file completo, ProgrammareLOconVB.ods, è disponibile nella sezione didattica / foglio elettronico del mio sito.