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]