Fondamenti di programmazione
OpenOffice.org Basic
a cura di nizan Soluzioni Open Source
GNU Free Documentation License
Copyright © 2003 nizan Soluzioni OpenSource via Marconi,14
Casalecchio di Reno.
Permission is granted to copy, distribute and/or modify this document under
the terms of the GNU Free Documentation License, Version 1.2 or any later
version published by the Free Software Foundation; with the Invariant Text
Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled
"GNU Free Documentation License".
2
OpenOffice.org
OpenOffice.org è un progetto Open Source che
ha quale scopo primario lo sviluppo di una
Suite
per
l'Ufficio
multi-lingue
e
multi-
piattaforma, basata sullo standard aperto XML
di salvataggio dei documenti
3
Differenze tra
StarOffice e OpenOffice.org
Non tutto il codice di StarOffice è disponibile presso OpenOffice.org.
La ragione dipende dal fatto che Sun Microsystems utilizza codice di
terze parti e ne acquista la licenza; non ha perciò il permesso di
renderlo utilizzabile in OpenOffice.org. Le parti che sono o saranno
presenti in StarOffice, ma non disponibili in OpenOffice.org includono:
* Controllo Ortografico
* Alcuni caratteri (inclusi, in modo particolare, i caratteri delle lingue orientali)
* La Guida
* Il componente di Database (Adabas D)
* I Modelli
* La vasta galleria di Clip Art
* Alcune funzionalità di ordinamento (nelle versioni asiatiche)
* Alcuni filtri per i file
4
OpenOffice.org: uso delle macro
●
Creazione nuova macro
●
Creazione nuovo modulo
●
Gestione moduli
●
Gestione librerie
●
Importazione/esportazione
●
Assegnazione macro
5
OpenOffice.org:uso delle macro
6
Finestra Macro: moduli standard
7
Opzioni: percorsi
8
Finestra Macro: moduli utente
9
Gestione macro: moduli
10
Gestione macro: librerie
11
Assegnazione macro: voce di
menù
12
Assegnazione macro:
combinazione di tasti
13
Assegnazione macro: eventi
14
OpenOffice.org Basic: differenze
rispetto ai dialetti basic tradizionali
OpenOffice.org Basic è modulare
La programmazione con OpenOffice.org Basic
è basata su singole Subs o Functions che
terminano sempre con End Sub o End
Function. In ogni Sub o Function può essere
chiamata un'altra Sub o Function
Quando
una
macro
viene
eseguita
automaticamente essa chiama la Sub
corrispondente
15
OpenOffice.org Basic:
considerazioni tecniche
●
Variabili
●
Oggetti
●
Procedure e funzioni
●
Librerie di moduli e dialoghi
16
Variabili: dichiarazione
●
DIM a$
–
●
DIM a As String
–
●
dichiara “a” come stringa
dichiara “a” come stringa
DIM a$, b As Integer
–
dichiara “a” come stringa, “b” come intero
17
Variabili: dichiarazione
La dichiarazione delle variabili
obbligatoria
NON è
Questo comportamento può essere cambiato
utilizzando “OPTION EXPLICIT” come prima
istruzione di un modulo
18
Variabili: tipi
Forma breve
DIM Variabile As ...
●
DIM Variabile%
●
Integer
●
Date
●
DIM Variabile&
●
Long
●
Boolean
●
DIM Variabile!
●
Single
●
DIM Variabile#
●
Double
●
DIM Variabile@
●
Currency
●
DIM Variabile$
●
String
19
Procedure e Funzioni: chiamata
semplice
Sub Inizio
DIM Variabile1 As String
DIM Variabile2 As Integer
Codice
End Sub
20
Procedure e Funzioni: chiamata
semplice
Function Inizio As Integer
DIM Variabile1 As String
DIM Variabile2 As Integer
Codice
Inizio = Valore (valore di ritorno)
End Function
21
Procedure e Funzioni: chiamata
con parametri
Sub Inizio(Par1 As Integer, Par2 As String)
DIM Variabile1 As String
DIM Variabile2 AS Integer
Codice
End Sub
22
Procedure e Funzioni: chiamata
con parametri
Function Inizio(Par1 As Single) As Integer
DIM Variabile1 As String
DIM Variabile2 AS Integer
Codice
Inizio = Valore (valore di ritorno)
End Function
23
Procedure e funzioni: visibilità
delle variabili
●
PUBLIC Variabile As TYPENAME
–
●
PRIVATE Variabile As TYPENAME
–
●
Visibile solo nel modulo corrente
DIM Variabile As TYPENAME
–
●
Visibile in tutti i moduli
Come sopra
STATIC Variabile As TYPENAME
–
Preserva il valore di una variabile in una Sub
24
Procedure e funzioni: altre
caratteristiche
●
Di default tutte le variabili vengono passate
alle funzioni per riferimento
–
●
Per modificare questo comportamento
aggiungere la keyword “ByVal” prima di un
parametro nella chiamata della funzione
Le chiamate ricorsive di Subs e Functions
NON sono permesse
25
Librerie, moduli e dialog
●
●
●
Le librerie sono un tool per organizzare più moduli.
Quando un documento o un template vengono
salvati, tutte le librerie in esso contenute vengono
salvate
I moduli contengono Sub e Function e tutte le
variabili valide in uno o tutti i moduli
I dialog permettono l'interazione con l'utente tramite
controlli ed eventi
26
Gestione macro: moduli
27
OpenOffice.org Basic IDE
●
●
●
●
●
Ambiente di sviluppo integrato in
OpenOffice.org
Supporto linguaggio di programmazione
OpenOffice.org Basic
Editor avanzato
Interfacciamento diretto con API di
programmazione
Debugging avanzato
28
StarBasic IDE: interfaccia
29
StarBasic IDE: debugging
30
L'API OpenOffice.org
L'API OpenOffice.org si basa sulla tecnologia a
componenti di OpenOffice.org e consiste in
una ampia gamma di interfacce scritte in un
linguaggio IDL simile a CORBA.
Mentre la tecnologia a componenti determina come i
componenti o le applicazioni comunicano gli uni con
gli altri e come accedere all'API da specifici linguaggi,
l'API definisce l'interfaccia per accedere alle
funzionalità indipendentemente dal linguaggio usato.
31
L'API OpenOffice.org: definizione
●
L'API OpenOffice.org non è un linguaggio di
programmazione
–
E' una definizione astratta di tutti gli oggetti e
delle interfacce che si possono usare nella
programmazione.
–
OpenOffice.org Basic offre un interfacciamento
diretto con l'API OpenOffice.org ma le stesse
interfacce possono essere utilizzate da altri
linguaggi di programmazione (C, C++, Java,
StarScript)
32
API OpenOffice.org: informazioni
addizionali
●
http://api.openoffice.org/
–
●
http://api.openoffice.org/basic/man/tutorial/tutorial.pdf
–
●
Homepage del progetto API OpenOffice.org
Tutorial sull'API OpenOffice.org (aka Staroffice)
e OpenOffice.org Basic (aka StarBasic)
http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html
–
Manuale di riferimento (online) dell'API
OpenOffice.org
33
OpenOffice.org API: concetti
●
Servizi e interfacce
●
Moduli
●
Componenti
34
OpenOffice.org API: servizi e
interfacce
●
Un servizio è un concetto “astratto” che
fornisce interfacce e proprietà
–
Ogni implementazione di un particolare servizio
deve fornire le stesse interfacce
–
Una interfaccia è una collezione di metodi che
forniscono certe funzionalità
35
Gestione macro: librerie
36
Servizi e interfacce
37
OpenOffice.org API: moduli
●
I moduli sono raggruppamenti di servizi,
interfacce, tipi, numeratori e strutture dati.
–
Alcuni esempi di moduli sono text, sheet, table e
drawing
–
Sebbene i loro nomi corrispondano con quelli di
certe applicazioni non c'è un legame diretto tra
questi (es. il modulo document non è usato
solamente per documenti di testo)
38
StarOffice API module
structure
39
OpenOffice.org API: componenti
●
I componenti implementano servizi dell'API
di OpenOffice.org
–
Non è possibile accedervi direttamente
programmando con l'API di OpenOffice.org.
–
Sono accessibili come “beans” che è possibile
incorporare nei programmi
–
Il loro utilizzo è fuori dallo scopo di questo
trattato
40
END
a cura di nizan Soluzioni Open Source
Fondamenti di programmazione
OpenOffice.org API
(parte 2)
a cura di nizan Soluzioni Open Source
GNU Free Documentation License
Copyright © 2003 nizan Soluzioni OpenSource via Marconi,14
Casalecchio di Reno.
Permission is granted to copy, distribute and/or modify this document under
the terms of the GNU Free Documentation License, Version 1.2 or any later
version published by the Free Software Foundation; with the Invariant Text
Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled
"GNU Free Documentation License".
Funzioni I/O standard
OpenOffice.org
Basic
comprende
un
set
completo di funzioni di I/O sul filesystem che lo
rendono compatibile con Visual Basic. Per
garantire l'indipendenza dal sistema operativo
usato è stata aggiunta la notazione “file://...”
Esempio I/O con funzioni standard
Open "file:///home/guandalf/prova.txt" For Input
As #1
While Not Eof(#1)
Input #1, a$
Print a$
Wend
Close #1
I/O con l'API OpenOffice.org
Servizio:
com.sun.star.ucb.SimpleFileAccess
Interfacce:
com.sun.star.ucb.XSimpleFileAccess2
com.sun.star.ucb.XSimpleFileAccess
I/O con l'API OpenOffice.org
metodi
●
Copiare, muovere e rimuovere files e folders
(copy(), move(), kill())
●
Ottenere informazioni riguardanti files e
folders (isFolder(), exists(), getSize(), ...)
●
Aprire e creare files (openFileRead(),
openFileWrite(), openFileReadWrite())
I/O con l'API OpenOffice.org
intefacce stream
●
com.sun.star.io.XInputStream,
com.sun.star.io.XSeekable
●
com.sun.star.io.XOutputStream,
com.sun.star.io.XSeekable
●
com.sun.star.io.XStream,
com.sun.star.io.XSeekable
Intefacce stream specifiche per
I/O su files di testo
Servizi:
com.sun.star.io.TextInputStream
com.sun.star.io.TextOutputStream
Interfacce:
com.sun.star.io.XTextInputStream
com.sun.star.io.XActiveDataSink
com.sun.star.io.XTextOutputStream
com.sun.star.io.XActiveDataSource
Intefacce stream specifiche per
input da files di testo
L'interfaccia
com.sun.star.io.XActiveDataSink
esporta il metodo
setInputStream()
che accetta come parametro un oggetto
ritornato dal metodo
openFileRead()
Intefacce stream specifiche per
I/O su files di testo
Utilizzando i metodi
readLine()
readString()
esportati dall'interfaccia
com.sun.star.io.XTextInputStream
possiamo leggere linee o stringhe dal file di
testo
Intefacce stream specifiche per
I/O su files di testo
Utilizzando il metodo
setEncoding()
possiamo definire la codifica dei caratteri
che sarà usata (default UTF-8)
http://www.iana.org/assignments/character-sets
Intefacce stream specifiche per
output su files di testo
L'interfaccia
com. sun. star. io.XActiveDataSource
esporta il metodo
setOutputStream()
che accetta come parametro un oggetto
ritornato dal metodo
openFileWrite()
Intefacce stream specifiche per
I/O su files di testo
Utilizzando il metodo
writeString()
esportato dall'interfaccia
com.sun.star.io.XTextOutputStream
possiamo scrivere stringhe nel file di testo
Chiusura streams
I files aperti devono essere chiusi
utilizzando i metodi
com.sun.star.io.XInputStream:closeInput()
com.sun.star.io.XOutputStream:closeOutput()
Esempio I/O con API
OpenOffice.org
oSimpleFileAccess = createUnoService_
("com.sun.star.ucb.SimpleFileAccess")
oStream = oSimpleFileAccess.openFileRead_
("file:///home/guandalf/prova.txt")
oTextStream = createUnoService_
("com.sun.star.io.TextInputStream")
oTextStream.setInputStream(oStream)
While Not oTextStream.isEOF()
sLine = oTextStream.readLine()
Print sLine
Wend
oStream.closeInput()
Formati data e ora
OpenOffice.org supporta diversi tipi di formati e
funzioni per il trattamento di data e ora
compatibili con Visual Basic
Formati data e ora
I metodi
com.sun.star.awt.XDateField:setDate()
e
com.sun.star.awt.XDateField:getDate()
utilizzano uno speciale formato ISO non
compatibile con le funzioni
Date e Time
interne al Basic
Formati data e ora
Le funzioni
CDateToIso
e
CDateFromIso
convertono i formati da quello del Basic a
quello delle API e viceversa
Interazione tra Basic e API
●
StarDesktop
●
ThisComponent
StarDesktop
Dà accesso diretto al servizio:
com.sun.star.frame.Desktop
MsgBox StarDesktop.Dbg_SupportedInterfaces
equivale a
Dim oDesktop
oDesktop =
createUnoService_(“com.sun.star.frame.Desktop”)
MsgBox oDesktop.Dbg_SupportedInterfaces
ThisComponent
●
●
Dà accesso al documento corrente o che
contiene il codice eseguito
Il valore ritornato dipende dal documento al
quale fa riferimento
–
Es.
MsgBox ThisComponent.Dbg_SupportedInterfaces
Questo esempio produrrà diversi risultati dipendentemente
dal documento sul quale stiamo operando
Interfacce di default
Tutti i documenti esportano una serie di
interfacce di default.
Dipendentemente
dal
tipo
di
documento,
saranno disponibili una ulteriore serie di
interfacce specializzate.
Interfacce esportate da tutti i
documenti (segue)
●
com.sun.star.beans.XPropertySet
●
com.sun.star.container.XChild
●
com.sun.star.document.XdocumentInfoSupplier
●
com.sun.star.document.XEventBroadcaster
●
com.sun.star.document.XViewDataSupplier
●
com.sun.star.document.XEventsSupplier
●
com.sun.star.document.XLinkTargetSupplier
Interfacce esportate da tutti i
documenti
●
com.sun.star.frame.XModel
●
com.sun.star.frame.XStorable
●
com.sun.star.lang.XServiceInfo
●
com.sun.star.lang.XMultiServiceFactory
●
com.sun.star.lang.XEventListener
●
com.sun.star.style.XStyleFamiliesSupplier
●
com.sun.star.util.XModifiable
●
com.sun.star.view.XPrintable
com.sun.star.beans.XPropertySet
Fornisce informazioni e accesso alle proprietà
di una implementazione.
Le proprietà possono essere di tipo:
● Bound
● Constrained
● Free
E' possibile legare dei “listener” alle proprietà di
tipo bound e constrained.
com.sun.star.container.XChild
Permette l'accesso al “genitore” dell'oggetto
specificato tramite i metodi
getParent()
setParent()
com.sun.star.document.XDocumentInfoSupplier
Fornisce informazioni specifiche sul documento
come:
autore
data di creazione
titolo
informazioni sull'utente
com.sun.star.document.XEventBroadcaster
Permette di registrare “listener” che saranno
chiamati quando determinati eventi avverranno
nel documento
Alcuni nomi di eventi sono:
OnLoadFinished
OnPrint
OnResize
com.sun.star.document.XViewDataSupplier
Dà accesso a una serie di proprietà che
descrivono le “viste” del documento
Ogni vista è descritta da una serie di
com.sun.star.beans.PropertyValue
com.sun.star.document.XEventsSupplier
Attraverso la chiamata al metodo
getEvents()
ritorna una lista di handlers legati a eventi
dell'oggetto
com.sun.star.document.XLinkTargetSupplier
Interfaccia fornita dagli oggetti all'interno del
modello del documento che possono essere
target di un link.
Il metodo
getLinks()
ritorna
l'elenco
e
implementa
LinkTargets sul quale operare.
il
servizio
com.sun.star.frame.XModel
E' la rappresentazione di un componente
creato tramite un URL e degli argomenti.
Contiene ad esempio il nome della risorsa
accessibile tramite il metodo
getURL()
com.sun.star.frame.XStorable
Permette in modo semplice di immagazzinare
un componente in un URL.
Ad esempio il metodo
store()
salva il componente nell'URL dal quale era
stato caricato.
com.sun.star.lang.XServiceInfo
Fornisce informazioni riguardanti le
implementazioni di servizi, cioè quali servizi
sono implementati e il nome
dell'implementazione.
com.sun.star.lang.XMultiServiceFactory
Permette la creazione di istanze di servizi che
verranno inclusi nel documento.
Con il metodo
createInstance()
si crea una istanza (ad esempio di un servizio,
ma non solo) all'interno del documento.
com.sun.star.lang.XEventListener
E' l'interfaccia di base per tutte le interfacce
“listener”
Esporta un metodo
disposing()
che viene chiamato quando il “broadcaster” sta
per essere rimosso
com.sun.star.style.XStyleFamiliesSupplier
Questa interfaccia fornisce l'accesso alle
famiglie di stili contenute nel documento.
Il metodo
getStyleFamilies()
ritorna questo elenco come un contenitore di
stili.
com.sun.star.util.XModifiable
Rende accessibile lo stato di documento
modificato attraverso i metodi
isModified()
setModified()
com.sun.star.view.XPrintable
Fornisce le funzionalità basilari di stampa
Esporta i metodi
getPrinter()
setPrinter()
print()
Documenti Text:
servizi e interfacce
●
Servizio com.sun.star.text.TextDocument
che esporta l'intefaccia
com.sun.star.text.XTextDocument
●
Diverse altre interfacce specialmente dal
modulo com.sun.star.text
com.sun.star.text.XTextDocument
Fornisce l'interfaccia principale per un
documento di testo
Esporta
getText()
reformat()
Documenti Spreadsheet:
servizi e interfacce
●
Servizio
●
Diverse altre interfacce specialmente dal
com.sun.star.sheet.SpreadsheetDocument
modulo com.sun.star.sheet
com.sun.star.sheet.SpreadsheetDocument
Fornisce l'accesso a una collezione di fogli di
calcolo
Esporta
getSheets()
Documenti Drawing:
servizi e interfacce
●
Servizio
●
Diverse altre interfacce specialmente dal
com.sun.star.sheet.DrawingDocument
modulo com.sun.star.drawing
END
a cura di nizan Soluzioni Open Source
Scarica

Programmazione OO