On 13/06/06, Paolo Mantovani <[EMAIL PROTECTED]> wrote:

Alle 17:52, martedì 13 giugno 2006, Michele Zarri ha scritto:
> Ciao,
>
> Ho un piccolo problemino che vi vorrei sottoporre: ho creato una
finestra
> di dialogo con un paio di controlli piu' un pulsante "OK" e uno
"Cancel".
>
> Prima che la finestra si chiuda devo compiere qualche operazione percio'
ho
> creato una subroutine che ho associato all'evento "mouse release" sul
tasto
> OK e tutto funziona.

Una piccola considerazione:
L'evento mouse release va bene ma l'evento "on action" è meglio
Da quanto mi risulta infatti, quest'ultimo è stato concepito proprio come
astrazione dell'evento predefinito di un pulsante.

In effetti per gestire al meglio l'evento mouse button release dovresti
controllare pure il pulsante premuto, e il numero di clicks

Cosa che non è necessaria con l'evento "on action"

>
> Purtroppo pero' la finestra di dialogo si chiude anche se l'utente preme
il
> tasto invio (il pulsante OK e' quello di default), solo che in questo
caso
> il mio codice non viene eseguito.

Ed è cosa buona e giusta infatti :-)

>
> Esiste un metodo veloce per catturare l'evento chiusura della finestra
di
> dialogo cosi' che possa eseguire il codice che voglio? Mi piacerebbe
> evitare di mettere un key listener anche perche' non saprei a quale
> controllo associarlo.

Niente di tutto ciò.
Per gestire i dialoghi di openoffice si opera come con i dialoghi di tipo
msgbox:

In pratica:

--------------------------------
iDlgResult = oDlg.Execute 'il dialogo viene mostrato:
                        'il flusso di esecuzione rimane bloccato fino
                        'a che il dialogo non viene chiuso dall'utente

If iDlgResult = 1 Then 'l'utente ha premuto OK (o invio)
        'fai qualcosa di utile qui
Else
        'l'utente ha premuto annulla (o ESC)
        'chiudi la faccenda senza fare nulla
End If
----------------------------



ciao
Paolo M

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Ciao Paolo,

Grazie per la pronta risposta.

L'evento "on action" pare interessante, ma da programmatore naif quale sono
di solito uso la GUI per associare funzioni agli eventi e percio' preferisco
usare gli eventi predefiniti nel secondo tab delle proprieta' di un
controllo. L'unico caso in cui sono stato costretto a ricorrere a metodi
piu' consoni ad un programmatore e' stato per catturare l'evento doppio
click che mi sono dovuto fare a manina.

Provo pero' a spiegare meglio il problema.
Normalmente seguo sempre la strada che indichi tu nell'esempio, cioe'

If oMyDialog.execute() Then
  ' l'utente ha premuto Ok o invio
Else
 ' l'utente ha premuto cancel
End If

Ma in questo caso particolare ho bisogno di verificare che uno dei campi sia
stato riempito correttamente e percio' prima di chiudere la finestra di
dialogo e ridare il controllo alla routine che ha lanciato la finestra di
dialogo eseguo un test e se non sono soddisfatto prevengo la chiusura
restituendo il focus al campo incriminato. Naturalmente tu mi potresti dire:
perche' non fai il test quando il campo incriminato perde il focus? e la mia
risposta e' che ho provato e l'ho trovato poco amichevole per l'utente.
Spero di essermi spiegato meglio :)

Ciao,

Michele

Rispondere a