Alle 11:06, domenica 13 maggio 2007, Renato Ferrari ha scritto:
> Il 00:03, domenica 13 maggio 2007, Paolo Mantovani ha scritto:
> > > ad esempio, se ho un foglio di calcolo con due o tre finestre di
> > > dialogo, devo sempre creare-dichiarare nella macro le finestre di
> > > dialogo?
> >
> > Non ho ben capito, puoi essere più specifico?
>
> per esempio, da questo foglio e relativa macro scritta da Mario Lodi
> Rizzini: --------------------------
> oDialog = LoadDialog("Standard", "UserFormInputDati", DialogLibraries)
[...]
> oDialog.Execute()
> --------------------------------------------------------------
> ogni singolo componente di una finestra di dialogo viene ridichiarata.
> in staroffice5.2 era semplicemente così:
>
> ENUS.Show
>
> se non dovevo reimpostare i valori dei singoli campi della finestra di
> dialogo.
Ok ore è chiaro.
Si, devi istanziare il dialogo in modo esplicito.
Attenzione:
il codice che hai riportato usa una funzione "LoadDialog" per creare l'istanza
di un dialogo.
Questa funzione è contenuta nella libreria Tools perciò dovrai aver cura di
caricare questa libreria prima di chiamare la funzione
In realtà questa funzione non fa nulla di complicato perciò si potrebbe pure
evitare:
oDialog = createUnoDialog( DialogLibraries.Standard.UserFormInputDati )
createUnoDialog è una funzione runtime di starbasic e converte un descrittore
di dialogo in un dialogo runtime (eseguibile).
> > > (ActiveWindow.JumpToTable(3) mi permette di attivare la terza tabella
> > > di un foglio elettronico d'acchito)
> >
> > Hai provato con il registratore di macro?
>
> quale?
> quello fornito con OOo registra tramite "dispatcher" che mi da' l'idea di
> essere una specie di traduttore dei comandi di staroffice5.2,
Infatti lo avevo suggerito proprio perchè genera codice in qualche modo simile
a quello di StarOffice 5.x
> genera una
> marea di variabili passate poi come argomento ai vari comandi e non mi
> permette di capire realmente quale sia l'equivalente "nativo"
> dell'istruzione che mi serve.
Si, il codice basato su dispatcher è un po dispersivo ma alla fine è
ripetitivo e perciò non difficile da capire.
Però, parlando di cosa è "nativo" e cosa non lo è, bisogna anche dire che il
DispatchHelper è un normale servizio API, perciò tecnicamente parlando non è
meno "nativo" di qualunque altro servizio API.
Io direi piuttosto che il DispatchHelper è un servizio API che consente un
accesso *generico* (ma limitato) alle funzionalità di OpenOffice,
Dall'altra parte esistono i servizi API *dedicati* o *specializzati* che
consentono un accesso completo alle funzionalità della suite (e anche altro)
Speculazioni a parte, il limite principale del codice basato su DispatchHelper
è che risulta difficile da "generalizzare", perciò poco utile anche a fini
didattici.
Te lo avevo suggerito perchè non sapevo quale era il tuo livello di esperienza
e non volevo confonderti le idee.
Visto però che su questo punto hai le idee piuttosto chiare vediamo come si
procede usando le API "specializzate" anzichè il dispatchHelper.
Per attivare una tabella:
oSheet = ThisComponent.Sheets(2)
ThisComponent.CurrentController.setActiveSheet(oSheet)
Ricorda che gli indici nell'API partono sempre da 0 perciò l'indice 2
corrisponde alla terza tabella.
Per le altre domande io aprirei un thread specifico, giusto per non seppellire
le informazioni utili e favorire future ricerche in archivio.
> Devo dire che, purtroppo, da questo punto di
> vista il VBA è molto superiore!
Assolutamente. VB/VBA sono prodotti bellissimi, ci ho programmato per anni con
grande soddisfazione. Poi però con il passare degli anni mi rendevo conto che
le cose che conoscevo cambiavano continuamente di nome, un po come quelle
discoteche che per sembrare nuove cambiano il cartello ogni stagione.
E di nome in nome, la mia conoscenza svaniva.
Il mio investimento di tempo e capacità si deprezzava a ogni nuovo stupido
acronimo (bisogna dire che quelli della Microsoft in quanto ad acronimi sono
anche più prolifici delle Giovani Marmotte)
E così un giorno ho mi sono reso conto che VB non era un buon investimento per
il mio tempo, anzi era un pessimo investimento, un pozzo senza fondo, e me ne
sono liberato.
> (ciò nonostante, resto attaccato con le
> unghie e i denti, sia a casa sia, e con ancor maggior difficoltà, in
> ufficio, a linux e OOo)
Certo ci sono difficoltà.
Passando da VBA a StarBasic devi fare i conti con l'API di Openoffice.org
Il problema principale qui è che la complessità non viene nascosta.
In VBA l'esercizio principale del produttore è quello di nascondere la
complessità di quello che gira "sotto".
Lodevole intento, anche se a me fa venire in mente lo sforzo del genitore che
cerca di rispondere a certe domande del figlio piccolo:
Il poveretto cerca disperatamente le parole più elementari e innocue per non
dover spiegare il mondo che sottende a quella parolona di cui il piccolo vuol
sapere il significato, e alla fine invece di una spiegazione semplice viene
fuori una spiegazioni stupida, che naturalmente produrrà altre mille domande.
Beh magari può non piacere a chiunque, ma l'API di OOo ti tratta da pari a
pari.
Il vantaggio è che quando hai capito come funziona, nessuno potrà azzerare la
tua conoscenza cambiando un'interfaccia o una sigletta.
Tanto per tornare dalla filosofia alla pratica, per affrontare l'automazione
di OOo senza traumi occorrono alcuni strumentini a portata di mano:
Xray
SDK
Manuali di Andrew Pitonyak
Manuale di Sun (ti ho dato il link nel post precedente)
Hai già tutte queste cose? le usi? quali sono i problemi?
> quello che avevi scritto tu va molto meglio, da questo punto di vista, ma è
> da molto tempo che non lo provo, perchè quando c'ho provato avevo le idee
> ancora più confuse di adesso!!!
Io di registratori ne ho scritti due, il primo sotto forma di documento Calc è
ormai arcaico, anche se forse funziona ancora.
Lo scrissi quando in OpenOffice non esisteva ancora il registratore di macro
(erano i tempi della 1.0 ovviamente)
Attualmente ti consiglio di provare questo:
http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/
Si tratta di un registratore alternativo che una volta installato "rimpiazza"
il registratore di macro "ufficiale" della suite.
Questo registratore alternativo scrive codice basato sulle api "specializzate"
(o "native" come le chiami tu) invece del solito codice basato su
DispatchHelper.
Perchè possa funzionare correttamente è necessario installare anche almeno
un "transformer".
Il Transformer è la parte che materialemnte produce il codice registrato.
A tutt'oggi ho scritto solo un Transformer per Calc:
http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/transformers/Calc/
ciao
Paolo M
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]