Bart Aimar ha scritto:
>> Bernardini Lido ha scritto:
>> > Paolo Mantovani ha scritto:
> >>Questa funzione infatti è in pratica un listener del listener!! cioè
> >>contiene un ciclo che rimane in ascolto su un listener!
> >>Il tutto con l'apparente intento di trasformare del codice event-driven
> >> in codice a chiamate rigide.
> >
> > Accidenti! Non ci avevo pensato, si vede che sono un principiante con i
> > listener
> > Ora che mi hai illuminato, capisco benissimo che un listener si può
> > paragonare a un ciclo infinito in attesa di un evento
>
> Al solito... intuisco qualcosa ma non capisco...
> Vorrebbe dire che il codice che hai postato è ulteriormente
> semplificabile? ...??...

Ho provato a eliminare la funzione getRange con il suo ciclo do loop,
ma senza il ciclo di attesa il processo basic si interrompe lasciando
in esecuzione il listener in background di conseguenza si perde 
l' impostazione della variabile lcolorSRC
Ho provato a impostare il primo range selezionato a MyApp_mousePressed
e il secondo a MyApp_mouseReleased, ma non funziona
Qualche suggerimento in proposito?

Intanto ripropongo il codice originale con l' aggiunta di un MsgBox, come 
richiesto da Bart, con un pulsante Annulla per dare la possibilità 
all' utente di ripensarci

REM  *****  BASIC  *****
Dim Sel As Boolean
Dim oDocView As Object
Dim oMouseClickHandler As Object
Dim oSelect As Object
Dim lcolorSRC As String

sub copia_solo_colore_Sfondo
        oCellSRC=ThisComponent.getCurrentSelection()
        lcolorSRC=oCellSRC.Cellbackcolor '-- Cattura il
                ' colore della prima cella selezionata 
        a = MsgBox("Qui ci scrivi quello che vuoi far sapere all' utente  "_
         , 128 + 32 + 1 , " Click sulla destinazione")
         'Qui ho aggiunto un box con tanto di pulsanti OK Annulla
         'Annulla serve nel caso l' utente dia inizio al processo 
         'per errore, il pulsante OK è quello attivo percio basta
         ' premere invio per dare inizio al processo
        If a = 2 Then Exit Sub
        SelectedRange=getRange()
        If IsNull(SelectedRange) Then Exit Sub 'Se, malauguratamente
                ' non dovesse tornare niente da getRange, si esce               
        
        SelectedRange.Cellbackcolor = lcolorSRC
end sub

function getRange()
        oDocView = ThisComponent.getCurrentController()
        RegisterMouseClickHandler
        on error goto cleanExit
        Sel=True
        do ' Inizia un ciclo infinito dal quale si esce             
        loop Until Sel=False' quando sel diventa Felse
        getRange=oSelect
        cleanExit:
        UnregisterMouseClickHandler
end function

' Sotto si crea un listener per intercettare il mouse
' Agisce solo quando il pulsante viene rilasciato
' cioè quando è stato selezionato tutto il range
' nel caso si debbano selezionare più celle

Sub RegisterMouseClickHandler
        oDocView = ThisComponent.getCurrentController()
        If Not IsNull(oMouseClickHandler) Then 
oDocView.removeMouseClickHandler(oMouseClickHandler)
        
oMouseClickHandler=createUnoListener("MyApp_","com.sun.star.awt.XMouseClickHandler")
        oDocView.addMouseClickHandler(oMouseClickHandler)
End Sub


Sub UnregisterMouseClickHandler
        on error resume next
        oDocView.removeMouseClickHandler(oMouseClickHandler)
End Sub


Function MyApp_mousePressed(oEvent) As Boolean
End Function

Function MyApp_mouseReleased(oEvent) As Boolean
        oSelect=ThisComponent.CurrentSelection
        Sel=False
End Function

Ciao a tutti

Lido

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

Rispondere a