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

Rispondere a