On 03/03/06, Bernardini Lido <[EMAIL PROTECTED]> wrote:
>
> Michele Zarri ha scritto:
>
> > a) seleziona l'elemento su cui si e' fatto doppio clic
> > b) chiudi la finestra di dialogo come se fosse stato premuto il pulsante
> OK
> >
> > Devo creare un listener o posso cavarmela con qualcosa di piu' adeguato
> > alle mie capacita' di programmatore?
>
> Credo di aver letto da qualche parte che StarBasic non supporta
> l' evento doppio click, c' è anche un evento ClickCount, per contare
> i click del mouse, ma, non mi ricordo per quale ragione, veniva
> consigliato
> di simulare il doppio click con del codice
>
> Ho preparato un paio di piccole sub che potrebbero andare bene per te
> naturalmente è un esempio perciò devi adattare il codice al tuo
> Comunque se vuoi provarle sono funzionanti
>
> Devi procedere così:
>
> 1) Crea una dialog
> 2) Metterci dentro una ListBox( i nomi ho lasciato quelli che imposta
> il basic)
> 3) Nelle proprietà vai a "Voci dell' elenco" e scrivici tre o quattro
> righe, per farlo scrivi una linea e premi Invio, si chiude, riapri
> il cursore è passato alla linea di sotto
> 4) Sempre nelle proprietà apri il tab Eventi e assegna alla pressione
> o al rilascio del tasto del mouse la sub Seleziona_Elemento()
> 5) Metti un pulsante dove ti pare e collegalo alla sub Crea_Dialog()
>
> Credo non ci sia altro
>
> Se clicchi una volta su una voce della ListBox, questa si evidenzia
> se entro un secondo clicchi un' altra volta quello che c' è scritto
> va a finire nella cella A1 della Tabella1 e la dialog si chiude
> Se invece aspetti più di un secondo non succede nulla
> e devi cliccare ancora due volte per farlo
>
> Quì sotto ti riporto il codice
>
> REM ***** BASIC *****
> REM Per provare questo codice si deve creare un dialogo
> REM Metterci dentro una casella di riepilogo(ListBox)
> REM Scriverci dentro tre o quattro voci dalla finestra
> REM proprietà della ListBox, per andare a capo usare "
> REM Sempre dalle proprietà selezionare il tab Eventi
> REM associare alla pressione del tasto del mouse
> REM la sub Seleziona_Elemento()
>
> Dim b As Integer
> Dim ListBox As Object
> Dim oDialog As Object
>
> Sub Crea_Dialog()
> BasicLibraries.LoadLibrary("Tools")
> oDialog = LoadDialog("Standard","Dialog1",DialogLibraries)
> Set ListBox = oDialog.getControl("ListBox1")
> b = 0 ' Setta a 0 la variabile b che serve per il conto
> ' click
> oDialog.Execute()
> End Sub
>
> Sub Seleziona_Elemento()
> Dim SelList as String
> oFoglio = ThisComponent.getSheets.GetByName("Tabella1")
> b = b + b ' La prima volta è 0 la seconda 2
> If b = 2 Then
> SelList = ListBox.getSelectedItem()
> oFoglio.getCellByPosition(0 ,0).string = SelList
> oDialog.EndExecute
> End If
> b = 1
> ' Le due linee sotto servono per creare un' interruzione
> ' nell' esecuzione del codice( un secondo), trascorso il
> ' quale la variabile b viene impostata a 0
> ' Se in questo intervallo di tempo si preme un' altra
> ' volta il tasto sinistro del mouse la sub viene rieseguita
> ' dall' inizio prima che b venga impostata a 0
> ' b diventa 2(b = b + b) e viene eseguito il codice dopo If
>
> Wait 1000
> b = 0
> End Sub
>
> Spero ti funzioni, fammi sapere
>
> Ciao Lido
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
> Ciao Emanuele, Lido,
Grazie moltissimo a entrambi.
Stasera sono un po' stanco ma conto di riprendere il discorso con calma nei
prossimi giorni.
Ho provato a seguire la strada indicata da Emanuele ma non riuscivo a capire
perche' l'action listener funzionasse, percio' ho preferito rassegnarmi a
cercare di imparare ad usare i listener e gli handler e mi piacerebbe
ritornare su questo discorso con calma.
Alla fine mi sono ritrovato con questo codice, ma credo che manchi qualcosa
come l'uccisione del listener che non so dove/come fare.
REM Il modulo che gestisce la dialog box
Global oMouseListener As Object
REM Initialise the dialog box and the mouse listener
Sub subTestInitialise()
Dim oTF as Object
' the list box to which I will attach the listener
oLBControl = oTestDlg.getControl("LB")
' create the listener
oMouseListener = CreateUnoListener("LBM_", "
com.sun.star.awt.XMouseListener")
' attach it to the control
oLBControl.addMouseListener(oMouseListener)
'update also the text field
oTF = oTestDlg.getControl("TextField")
oTF.Text = "Initialised"
End Sub
REM routine invoked when a double click is received
Sub subUpdateTextField()
Dim nPos As Integer
Dim oTF As Object
oLBControl = oTestDlg.getControl("LB")
nPos = oLBControl.getSelectedItemPos()
oTF = oTestDlg.getControl("TextField")
oTF.Text = oLBControl.getItem(nPos)
End Sub
REM ============================================
REM == Managing the XMouseEvent ==
REM ============================================
sub LBM_mousePressed( oEvent )
'do nothing
end sub
sub LBM_mouseReleased( oEvent )
If oEvent.ClickCount > 1 Then
subUpdateTextField()
End If
end sub
sub LBM_mouseEntered( oEvent )
'do nothing
end sub
sub LBM_mouseExited( oEvent )
'do nothing
end sub
REM ============================================
REM == Gestione di XMouseListener ==
REM ============================================
E un paio di righe per invocare la dialog box
Global oTestDlg As Object
Sub Main
' load the dialog box
oTestDlg = createUnoDialog(DialogLibraries.Standard.Test)
' initialise it
subTestInitialise()
' display it
oTestDlg.execute()
End Sub
La dialog box un bottone ok, un bottone cancel, una listbox chiamata LB con
qualche elemento e un text field chiamato "TextField".
Per Lido velocemente: purtroppo non sono stato sufficientemente veloce da
riuscire a fermarti, pero' volevo ringraziarti lo stesso per aver scritto
tutte quelle righe di codice.
ciao,
Michele