On 11/04/06, Bart Aimar <[EMAIL PROTECTED]> wrote:
>
> Tempo fa Paolo aveva postato una soluzione per acchiappare un range
> selezionato con il mouse...
>
> Emanuele aveva "interpretato" e ne era venuto fuori un bell'aggeggio che
> io ho riutilizzato in diverse occasioni.
> (Quando parla Paolo ho bisogno dell'interprete...:-)  )
>
> L'unico difetto/limite era che la rotelle del mouse era inibita... poi è
> sbucata una faccenda fastidiosa che cercherò di descrivere.
>
> Apri nuovo doc calc (chiamiamolo doc1)
> Infilarci dentro (nell'IDE intendo) il codice che posto in coda alla mail
> Crea un pulsante su una sheet di doc1 e collegalo alla macro
> copia_solo_colore_Sfondo
>
> Apri un nuovo doc calc (chiamiamolo doc2)
> Cerca & sostituisci e cerca una stringa qualsiasi...
> lascia la finestra della ricerca aperta... e
> seleziona doc1
> colora una cella con un colore a piacere...
> seleziona la cella colorata e
> aziona il pulsante (macro > copia_solo_colore_sfondo....)
> Seleziona un range...
>
> La macro dovrebbe concludere con successo colorando a puntino il range
> selezionato...
> Ma qui succede l'evento: doc2  passa in primo piano...
> (o sarebbe meglio dire che doc1 è passa in secondo piano?)
>
> La linguetta (in basso) attiva è sempre quella di doc1, ma quella che si
> vede è doc2...
>
> Questo succede QUASI sempre!
>
> Ed  è molto fastidioso...
>
> C'è modo di porci rimedio?
> E per la rotella inibita... si può fare qualcosa?
>
> grazie per le risposte
>
> Bart
>
> ----------------------------------------------
> Questo è il codice... spero di non aver dimenticato nulla...
>
> REM  *****  BASIC  *****
> Global oRangeSelectionListener As Object
> Global sA as string
>
>
> SUB Copia_solo_colore_Sfondo '
>
> Dim oSheetSRC as object
> Dim oSheetDest as object
> Dim oRangeDest as object
> Dim oCellSRC as object
> Dim lSheetDest as long
> Dim lcolorSRC as long
>
>         oSheetSRC = ThisComponent.Sheets.getByName(_
>         ThisComponent.currentcontroller.activesheet.name)
>         oCellSRC=ThisComponent.getCurrentSelection()
>         lcolorSRC = oCellSRC.Cellbackcolor
>         SelectedRange = getRange() ' richiama il listeners
>         ' che restuisce un address come stringa
>
>         lSheetDest=     getSheet(SelectedRange)
>         'numero della sheet (anche un'altra da SRC)
>         oSheetDest      =  ThisComponent.Sheets.getByIndex(lSheetDest)
>                 ' oggetto sheet
>         oRangeDest = oSheetDest.getCellRangeByName(SelectedRange)
>                  ' oggetto range di destinazione
>                 oRangeDest.Cellbackcolor = lcolorSRC
>   end sub
>
>
> function getRange() as string
>     sA = ""
>     TestRangeSelection
>     do
>         wait 100
>     loop while sA = ""
>     getRange = sA
> end function
>
> Sub TestRangeSelection()
> oDocView = ThisComponent.currentController
>
>   If Not IsNull(oRangeSelectionListener) Then
>       oDocView.removeRangeSelectionListener(_
>       oRangeSelectionListener)
>   End If
>
>   oRangeSelectionListener = createUnoListener("oDocView_" , _
>       "com.sun.star.sheet.XRangeSelectionListener")
>   oDocView.addRangeSelectionListener (_
>   oRangeSelectionListener)
>
>
>   Dim mArgs(2) As New com.sun.star.beans.PropertyValue
>   mArgs(0).Name = "InitialValue"
>   mArgs(0).Value = "A1"
>   mArgs(1).Name = "Title"
>   mArgs(1).Value = "Click sulla destinazione........."
>   mArgs(2).Name = "CloseOnMouseRelease"
>   mArgs(2).Value = True
>
>   oDocView.startRangeSelection(mArgs())
> End Sub
>
> function getSheet(ByVal sAddress as string) as string
> '   dim cellRange as object
>     dim currentSheet as object
>   '  dim row as object
>     currentSheet =_
>      ThisComponent.CurrentSelection.getSpreadSheet()
>     cellRange = currentSheet.getCellRangeByName(sAddress)
>   '  row = cellRange.getRows()
>     getSheet = cellRange.RangeAddress.sheet
> end function
>
>
> sub oDocView_done(oEvent)
> 'questa routine viene chiamata dal documento
> 'dopo che l'utente ha finito di selezionare il range
>   sA = oEvent.RangeDescriptor
>   oEvent.source.removeRangeSelectionListener(_
>   oRangeSelectionListener)
> End Sub
>
> sub oDocView_aborted(oEvent)
> 'questa routine viene chiamata dal documento
> 'se l'utente non ha selezionato nessun range
>   oEvent.source.removeRangeSelectionListener(_
>   oRangeSelectionListener)
> End Sub
>
> sub oDocView_disposing(oEvent)
> 'questa routine viene chiamata dal documento
> 'in caso di dipartita del compianto listener
> End Sub
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
> Ciao Bart,

A occhio quando chiudi la finestra di dialogo dove chiedi di selezionare un
range sembra che il controllo passi all'altra finestra di dialogo
(cerca/sostituisci) che percio' viene portata in primo piano.
Perche' non aggiungi un paio di linee di codice per riportare doc1 in primo
piano alla fine della sub?

Per la rotellina ci deve essere un modo, forse dovresti cercare di catturare
l'evento che associ all'azione "gira la rotella" nelle impostazioni del
mouse (magari e' uguale al tasto page down page up percio' devi mettere un
key listener invece di un mouse listener???).

Se scopri qualcosa sull'uso della rotella non scordarti di farcelo sapere!
:)

Rispondere a