Ciao Bart,
Alle 20:08, venerdì 14 aprile 2006, Bart Aimar ha scritto:
> Paolo Mantovani ha scritto:
> > Hai capito perfettamente, non si tratta di un trucco ma del normale
> > utilizzo delle routines collegate agli eventi.
> >
> > Chi è pratico di vba dovrebbe avere una certa esperienza con queste cose,
> > in effetti l'unica differenza è che in vba il listener viene istanziato e
> > registrato "di nascosto" dall'interprete, mentre in starbasic occorre
> > gestire esplicitamente tutto quanto.
>
> Ma, senza arrivare a "scopare sotto il tappeto", non potremmo relegarlo
> in un modulo, anzichè incasinare il codice che ne ha bisogno?
Si, è possibile, vedi sotto..
>
> Pensa anche a tutti i casi in cui forse, quella macro non ne avrà
> bisogno, o forse sì... dipenderà dall'utente...
> Esempio una situazione del tipo
> if msgbox("vuoi selezionare con il mouse o ti va bene la selezione attiva?"
> non mi sembra così strana e rara...
Tu continui ad inseguire il metodo usato in MsOffice, con l'inputbox che si
comporta anche da "range picker"
Purtroppo non c'è nulla di simile in ooo, quindi occorre capire bene quali
sono gli strumenti a disposizione e adattarvicisi, magari cambiando anche a
livello architetturale la nostra app.
[...]
> In vba hanno sviluppato un sacco di applicativi... mentre di
> applicazioni complete e funzionanti per OO ho visto veramente poco...
> malgrado le sue potenzialità!
Penso che sia stata fatta un sacco di roba, magari più in java che in basic
> Pur avendo il sospetto che si condivida poco il materiale "finito",
> credo sia sostanzialmente da imputarsi ad oggettive difficoltà
Spesso si tratta di applicazioni dedicate ad un singolo cliente che non
avrebbero senso in altri ambiti.
> (parti
> non ancora sufficientemente documentate e/o comprensibili solo per
> qualcuno)!
A mio parere la documentazione è ragionevolmente completa ed esaustiva ma è
indirizzata ad un lettore con competenze di livello professionale.
Ciò è normale.
Per le guide "for dummies" occorre probabilmente che ci sia interesse
commerciale a stamparle da parte di qualche editore. Forse in Italia ancora
non c'è una massa critica di utenti da giustificare l'investimento.
>
> Se è stata accettata un'idea così balzana come quella dei dispatch
Quale idea balzana?
> non
> vedo perchè non si possa raggruppare del codice in funzioni che tutti
> possano poi più facilmente utilizzare... :-)
Non capisco, chi dovrebbe farlo?
> > sono d'accordo, anche a me piace la finestrina di selezione range, però
> > credo che ci sia un problemino relativo al focus (il problema
> > inizialmente denunciato da Bart)
>
> Si! Il problema persiste...
> Non ho ancora provato ma forse il workaroud suggerito da Michele
> potrebbe tamponare questo problema...
[...]
L'idea è buona ma ho l'impressione che non basti.
Come ho suggerito in un altro post si potrebbe tentare di usare un listener
sull'evento focus-lost (ma non ho fatto prove)
>
> > Cmq intanto è già molto importante ripartire da una base di codice
> > "pulita".
>
> Vorresti insinuare che io insozzo il codice?
> Io che un tempo scrissi - dicono - addirittura un algoritmo?
No, non volevo insinuare.
Anzi guarda, parlandoci chiaro, la tecnica del ciclo in ascolto sul listener
non è un idea balorda, ho fatto di peggio in certe macro.
Ho sollevato però la questione perchè dai discorsi che ho letto mi pareva che
non fosse ben chiaro che si tratta comunque di una tecnica anomala,
possibilimente da evitare.
Ci possono essere casi in cui la si può valutare seriamente, ma se la si vuole
utilizzare solo per incapsulare il codice allora mi pare eccessiva.
Analizzando la questione in dettaglio:
le API di OOo non sono progettate pensando ad un linguaggio in particolare.
Nel caso specifico, appare evidente che se si vuole incapsulare la
funzionalità di XRangeSelection in una chiamata a funzione il basic è
inadeguato perchè non dispone dei necessari meccanismi di controllo (presenti
invece in altri linguaggi)
Osservando l'esempio in java nella devguide :
synchronized (aListener) {
aListener.wait(); // wait until the selection is done
}
xRngSel.removeRangeSelectionListener(aListener);
if (aListener.aResult != null && aListener.aResult.length() != 0)
{
E tuttavia, nella spiegazione iniziale si legge:
"[....]
Note that the use of wait to wait for the end of the selection is not how a
GUI application normally handles the events.
"
Pur non avendo meccanismi del genere di "synchronized... wait" , Il basic però
dispone di un meccanismo che permette di sospendere l'esecuzione di un
programma in attesa dell'input dell'utente.
Questo meccanismo è costituito dai dialoghi.
Usando un dialogo al posto del loop infinito si potrebbe incapsulare il
XRangeSelection in una unica chiamata a funzione.
Non so se questa tecnica si adatta a quello che stai facendo, questo spetta a
te valutarlo.
In alternativa dovresti creare un servizio in java o c++ o (forse) python che
incapsuli la funzionalità in questione, dopodichè lo potresti richiamare dal
tuo codice come un qualunque altro servizio API
ciao
Paolo M
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]