Grazie al vostro aiuto il mi sono lasciato alle spalle il problema di
referenziare gli oggetti. Ovviamente se ne sono presentati altri a
cui ho faticosamente trovato risposta.
Ed ora questo:
devo riempire un combobox in uno sheet con una lista di elementi che
vado a prendere da alcune celle.
Prima di inserirlo devo controllare se e` gia presente, in modo da
evitare duplicati.
pseudo-code:
for <ogni riga che devo controllare>
text = <testo nella cella>
for <ogni elemento nel combo>
if <elemento nel combo> = text then
<trovato!>
end if
next
if not <trovato> then
<inserisci nel combo>
end if
next
Il mio problema e` che non ho capito come si aggiungono elementi al
combobox, ne come si controllano quelli presenti.
Ho trovato questo:
http://api.openoffice.org/docs/common/ref/com/sun/star/awt/XComboBox.html
ma qualsiasi funzione usata mi torna sempre un errore.
Dove sbaglio ?
Onde evitare di disturbare con domande di cosi` 'alto livello', dove
posso reperire una documentazione esaustiva delle proprieta` e dei
metodi applicabili agli oggetti ?
--
<Don Quichotte>
Forse non è quello che vuoi, ma perchè non crei un db, crei una tabella
con un'unico campo e lo definisci come chiave primaria, quindi unica,
poi inserisci i vari record (quindi se provi ad inserirne uno già
presente non te lo lascia fare) poi crei la combo nel calc e la colleghi
al db?
q...@quo.it ha scritto:
> devo riempire un combobox in uno sheet con una lista di elementi che
> vado a prendere da alcune celle.
Probabilmente avrai già provato qui:
http://www.oooforum.org/forum/viewforum.phtml?f=9
però in questo post:
http://www.oooforum.org/forum/viewtopic.phtml?t=65194
c'è un link a a questo foglio di Calc:
"This working example shows you how to create dynamic combo boxes in a
custom Calc dialog."
http://www.linuxtalk.co.uk/tutorials/dynamic_combos.ods
Sicuramente non è risolutivo, ma a me è parso molto istruttivo.
Forse anche questo breve post può darti qualche spunto (poco più) per
prendere il controllo del combo box (se ho capito bene il tuo
problema):
http://www.oooforum.org/forum/viewtopic.phtml?t=60091
Anche io sto cercando di imparare qualche cosa sulle macro di OOo ma
trovo complicato l'utilizzo delle API. Rispetto a Excel si complica
tutto e si perde molto in immediatezza, ma questo sarebbe il problema
minore se la documentazione della SUN fosse meno astratta e più
esplicativa.
Fammi sapere.
Ciao.
[...]
> Anche io sto cercando di imparare qualche cosa sulle macro di OOo ma
> trovo complicato l'utilizzo delle API. Rispetto a Excel si complica
> tutto e si perde molto in immediatezza, ma questo sarebbe il problema
> minore se la documentazione della SUN fosse meno astratta e piᅵ
> esplicativa.
La Developer's Guide non usa i guanti di velluto perchᅵ ᅵ rivolta a tutti
gli sviluppatori, sia quelli che implementano le API internamente al team
di sviluppo ufficiale, sia gli sviluppatori esterni che *usano* le API.
Per questo motivo il linguaggio ᅵ formale e preciso e non ci sono "sconti"
per i nuovi arrivati. :-)
Questa impostazione spartana purtroppo ᅵ anche l'unica possibile con le
scarse risorse di cui dispone il team.
Se perᅵ ti riferivi al manuale Starbasic distribuito gratuitamente da Sun
devo dire che non mi ᅵ sembrato cosᅵ astratto e difficile, anche se devo
dire che quando uscᅵ io avevo giᅵ maturato una certa esperienza con le
macro, per cui diverse cose spiegate nel libro mi erano giᅵ note.
Sembrerᅵ strano, ma ti posso assicurare che con un po di esperienza ti
troverai a tuo agio come in VB/VBA, anzi, comincerai ad apprezzare la
coerenza e le potenzialitᅵ notevoli di questo nuovo ambiente.
Per fare un paragone, se in VBA ti puoi mettere "al volante" di MSOffice,
qui puoi anche aprire il cofano e cambiare qualche pezzo se ne hai voglia.
Chiaramente, se la guida ᅵ per tutti o quasi, mettere le mani nel motore
richiede una certa perizia, perᅵ a mio parere questo va visto come una
risorsa non come un ostacolo.
ciao
pablo
ciao
pablo
> Rieccomi qui ... OO mi sta facendo impazzire. :-(
>
> Grazie al vostro aiuto il mi sono lasciato alle spalle il problema di
> referenziare gli oggetti. Ovviamente se ne sono presentati altri a
> cui ho faticosamente trovato risposta.
>
> Ed ora questo:
> devo riempire un combobox in uno sheet con una lista di elementi che
> vado a prendere da alcune celle.
> Prima di inserirlo devo controllare se e` gia presente, in modo da
> evitare duplicati.
Ecco quello che dovrebbe essere l'equivalente del tuo pseudo-codice
raccomando cautela e declino qualunque responsabilità
REM ***** BASIC *****
Sub Test
oDoc = ThisComponent
oSheet = oDoc.Sheets.Tabella1
oForm = oSheet.DrawPage.Forms.Standard
oCombo = oForm.ComboBox1
For I = 0 To 5
oCell = oSheet.getCellByPosition(1, I) '1 = col.B
sText = oCell.getString()
mItems() = oCombo.StringItemList()
bFound = False
For Each sItem In mItems()
If sItem = sText Then
bFound = True
Exit For
End If
Next sItem
iMax = UBound(mItems())
If Not bFound Then
iMax = iMax + 1
Redim Preserve mItems(iMax)
mItems(iMax) = sText
oCombo.StringItemList() = mItems()
End If
Next I
End Sub
> Il mio problema e` che non ho capito come si aggiungono elementi al
> combobox, ne come si controllano quelli presenti.
>
> Ho trovato questo:
> http://api.openoffice.org/docs/common/ref/com/sun/star/awt/XComboBox.html
> ma qualsiasi funzione usata mi torna sempre un errore.
> Dove sbaglio ?
Non sbagli nulla ma ti manca un "pezzo" di informazione
Nei componenti grafici di ooo viene mantenuta distinta la parte logica
(Control Model) dalla vista (Control View)
Il documento che hai visto si riferisce alla *vista* mentre l'oggetto che
hai per le mani è il *modello* del comboBox
Questa è la pagina giusta:
http://api.openoffice.org/docs/common/ref/com/sun/star/awt/UnoControlComboBoxModel.html
>
> Onde evitare di disturbare con domande di cosi` 'alto livello', dove
> posso reperire una documentazione esaustiva delle proprieta` e dei
> metodi applicabili agli oggetti ?
Scarica il manuale StarBasic della Sun Microsystem (disponibile anche in
italiano)
Scarica e installa Xray di Bernard Marcelly (da ooomacros.org) è un object
inspector. (INDISPENSABILE)
Installa anche l'SDK (software Developement kit) perchè contiene la
documentazione API completa (in inglese)
Configurando opportunamente Xray potrai consultare la documentazione del SDK
molto più agevolmente.
Ulteriore documentazione in inglese qui:
http://www.pitonyak.org/
Se avrai ulteriori domande, postale tranquillamente qui e faremo il
possibile, come sempre. :-)
ciao
pablo
[cut]
> Ecco quello che dovrebbe essere l'equivalente del tuo pseudo-codice
> raccomando cautela e declino qualunque responsabilità
>
>
> REM ***** BASIC *****
[cut]
Addirittura la 'pappa pronta', troppa grazia! :-)
Ti ringrazio per l'esempio, ma a questo punto mi/ti pongo un'ulteriore
domanda: se volessi aggiungere un singolo item, al combo, sarebbe
possibile o devo ricostruire l'array ?
[cut]
> Non sbagli nulla ma ti manca un "pezzo" di informazione
> Nei componenti grafici di ooo viene mantenuta distinta la parte
> logica
> (Control Model) dalla vista (Control View)
> Il documento che hai visto si riferisce alla *vista* mentre
> l'oggetto che hai per le mani è il *modello* del comboBox
> Questa è la pagina giusta:
[cut]
E grazie per i link, ne faro` lettura. Certo che li nascondono proprio
bene!
Ciao,
--
<Don Quichotte>
[cut]
> Probabilmente avrai già provato qui:
> http://www.oooforum.org/forum/viewforum.phtml?f=9
> però in questo post:
> http://www.oooforum.org/forum/viewtopic.phtml?t=65194
> c'è un link a a questo foglio di Calc:
>
> "This working example shows you how to create dynamic combo boxes in
> a custom Calc dialog."
> http://www.linuxtalk.co.uk/tutorials/dynamic_combos.ods
>
> Sicuramente non è risolutivo, ma a me è parso molto istruttivo.
Dovendo imparare e tutto mi fa comodo, grazie!
[cut]
> Anche io sto cercando di imparare qualche cosa sulle macro di OOo ma
> trovo complicato l'utilizzo delle API. Rispetto a Excel si complica
> tutto e si perde molto in immediatezza, ma questo sarebbe il
> problema minore se la documentazione della SUN fosse meno astratta e
> più esplicativa.
Sono d'accordo con te: in VBA e` mediamente necessario scrivere meno
codice per ottenere lo stesso risultato. E concordo anche sul fatto
che la documentazione non e` sicuramente un punto di forza di OO, e
questo non invoglia chi sviluppa.
Attualmente la bilancia e` pesantemente a favore di office, ma spero
almeno in un futuro equilibrio.
Ciao,
--
<Don Quichotte>
[cut]
> Forse non è quello che vuoi, ma perchè non crei un db, crei una
> tabella con un'unico campo e lo definisci come chiave primaria,
> quindi unica, poi inserisci i vari record (quindi se provi ad
> inserirne uno già presente non te lo lascia fare) poi crei la combo
> nel calc e la colleghi al db?
Purtroppo sono vincolato ad usare il foglio di calcolo.
Ciao,
--
<Don Quichotte>
[...]
> Ti ringrazio per l'esempio, ma a questo punto mi/ti pongo un'ulteriore
> domanda: se volessi aggiungere un singolo item, al combo, sarebbe
> possibile o devo ricostruire l'array ?
E' possibile ma non dal ControlModel.
I metodi per manipolare le item singolarmente sono nel ControlView
In particolare:
addItem adds an item at the specified position.
addItems adds multiple items at the specified position.
removeItems removes a number of items at the specified position.
getItemCount returns the number of items in the combo box.
getItem returns the item at the specified position.
getItems returns all items of the combo box.
La documentazione si trova nel link che avevi trovato all'inizio:
http://api.openoffice.org/docs/common/ref/com/sun/star/awt/XComboBox.html
...oppure nel SDK se nel frattempo lo hai scaricato.
Ora ti rimane il problema di recuperare il ControlView:
Nella libreria Tools ci sono tre piccole ma utilissime funzioni che ti
aiutano nella gestione dei controlli di un formulario:
GetControlModel()
GetControlView()
GetControlShape()
Le funzioni sono commentate perciò non mi dilungo in spiegazioni.
Ovviamente se ci sono dubbi o problemi chiedi pure.
ciao
pablo
[cut]
> La documentazione si trova nel link che avevi trovato all'inizio:
Praticamente sotto al naso ... :-)
[cut]
> ...oppure nel SDK se nel frattempo lo hai scaricato.
Scaricato e installato. Cosi` come XRay. Mooooolto utile, grazie
davvero.
> Ora ti rimane il problema di recuperare il ControlView:
>
> Nella libreria Tools ci sono tre piccole ma utilissime funzioni che
> ti aiutano nella gestione dei controlli di un formulario:
> GetControlModel()
> GetControlView()
> GetControlShape()
Grazie, esaustivo come sempre.
--
<Don Quichotte>