Pannello di Controllo Moderatore ]

[Risolto] Calc Evento Doppio Click gestito prosegue in Edit

Creare una macro - Scrivere uno script - Usare le API

[Risolto] Calc Evento Doppio Click gestito prosegue in Edit

Messaggioda nickGiard » giovedì 23 novembre 2017, 17:35

Salve a tutti
dovendo gestire l'evento Doppi Click su fogli Calc indefiniti e sui quali non voglio aggiungere l'evento Doppio Click dal menu Foglio > Foglio Eventi, all'apertura del documento Calc via basic 'appiccico' tale evento all'intero Documento:
Codice: Seleziona tutto   Espandi visualeStringi visuale
gMouseHandler = CreateUnoListener("OnDC_",  "com.sun.star.awt.XMouseClickHandler")
ThisComponent.CurrentController.addMouseClickHandler(gMouseHandler)

Function OnDC_mouseReleased (e) As Boolean  'MouseEvent
   'codice di gestione
   OnDC_mouseReleased = False
   If e.Buttons <> 1 Then Exit Function'
   If e.ClickCount = 2 Then
           Dim oActCell
           Dim s$ : s$ = "com.sun.star.sheet.SheetCell"' evita bug
           oActCell = ThisComponent.CurrentSelection
           If oActCell.supportsService(s$) Then
               AppDoClick.Generale_DC(oActCell)'codice di gestione
           End If
   End If
End Function

dove le varie Function OnDC_ implementano l'interfaccia "com.sun.star.awt.XMouseClickHandler"

Tutto funziona perfettamente, ma all'uscita delle funzioni mi trovo la cella del Doppio Click (o quella che le rout hanno selezionato) in edit mode, quindi l'evento continua e si completa con quello predefinito. Vorrei capire come terminare l'evento con il termine delle mie funzioni, e non trovarmi col cursore nella cella in editing.
Grazie in anticipo.
Nicola
Ultima modifica di charlie il venerdì 24 novembre 2017, 18:17, modificato 1 volta in totale.
Motivazione: Aggiuto [Risolto] e spunta verde
Nicola con LibreOffice 5.3.6.1(x64) su Windows 7 Home Premium
nickGiard
 
Messaggi: 10
Iscritto il: lunedì 14 maggio 2012, 21:04

Re: Calc Evento Doppio Click gestito prosegue in Edit mode

Messaggioda vladboscaneanu » giovedì 23 novembre 2017, 20:31

Ciao.
Dovresti giocarti il valore False, la documentazione officiale dice che se ritorna True
" no other handler will be called and the broadcaster will take no further actions regarding the event"

Se proprio no, vai all'antica : alla fine del tuo codice seleziona un empty range
Codice: Seleziona tutto   Espandi visualeStringi visuale
REM Select an empty range..
oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
ThisComponent.CurrentController.Select(oRanges)

Ma non sono sicuro se funzionerà.
Con quale suite riscontri questo problema, con OpenOffice?
LibreOffice ultima versione su Windows 10
vladboscaneanu
Volontario
Volontario
 
Messaggi: 356
Iscritto il: martedì 22 ottobre 2013, 0:35

Re: Calc Evento Doppio Click gestito prosegue in Edit mode

Messaggioda patel » giovedì 23 novembre 2017, 20:58

ciao nickGiard, ti dispiace allegare un file di esempio funzionante ?
-------------------
OpenOffice 4.1 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2674
Iscritto il: venerdì 30 aprile 2010, 7:04
Località: Livorno

[Risolto] Calc Evento Doppio Click gestito prosegue in Edit

Messaggioda nickGiard » venerdì 24 novembre 2017, 16:13

Grazie Vlad per i tuoi suggerimenti.
In effetti mi ero scordato del significato del valore di ritorno.
Ho utilizzato ambedue i suggerimenti, col secondo ho eliminato un antipatico sfondo grigio sulla cella su cui si posiziona e attiva alla fine della rout.
Questo è il codice risultante:
Codice: Seleziona tutto   Espandi visualeStringi visuale
Function OnDC_mouseReleased (e) As Boolean'MouseEvent
   OnDC_mouseReleased = False
   If e.Buttons <> 1 Then Exit Function'
   If e.ClickCount = 2 Then
        Dim oActCell
        Dim s$ : s$ = "com.sun.star.sheet.SheetCell"' evita bug
        oActCell = ThisComponent.CurrentSelection
        If oActCell.supportsService(s$) Then
            AppDoClick.Generale_DC(oActCell)
            ' da vladboscaneanu
            'no other handler will be called and the broadcaster will take
            'no further actions regarding the event"
      OnDC_mouseReleased = True
     'evita che la cella resti selezionata con sfondo grigio
     Dim oRanges
     oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
     ThisComponent.CurrentController.Select(oRanges)                       
        End If
   End If
End Function

Mi scuso per i rientri del codice ma non sono riuscito a sistemarli.
Se ritenete utile per la comunità posso creare un file di esempio ad hoc con l'implementazione completa dell'evento doppio click con il listener.
Grazie ancora per l'aiuto
Nicola
Nicola con LibreOffice 5.3.6.1(x64) su Windows 7 Home Premium
nickGiard
 
Messaggi: 10
Iscritto il: lunedì 14 maggio 2012, 21:04

Re: Calc Evento Doppio Click gestito prosegue in Edit

Messaggioda charlie » venerdì 24 novembre 2017, 18:19

Ciao il [Risolto] e la spunta verde vanno sul primo titolo.
Ho provveduto io, in cambio posta l'esempio che sicuramente sarà utile a qualcuno, grazie :)
charlie
macOS 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 4723
Iscritto il: mercoledì 19 dicembre 2012, 10:50

Re: [Risolto] Calc Evento Doppio Click gestito prosegue in E

Messaggioda nickGiard » mercoledì 29 novembre 2017, 21:40

Grazie x il supporto.
Pensando che possa essere utile a qualcuno, ho implementato l'evento Doppio Click sul EventoDoppioClick.ods, che si attiva all'apertura dello stesso.
Il Doppio Click in qualsiasi cella, anche nei nuovi fogli, colora la cella di rosso. Se di nuovo torna al colore bianco[/size].
Le macro illustrano il tutto.
Allegati
EventoDoppioClick.ods
(11.41 KiB) Scaricato 11 volte
Nicola con LibreOffice 5.3.6.1(x64) su Windows 7 Home Premium
nickGiard
 
Messaggi: 10
Iscritto il: lunedì 14 maggio 2012, 21:04


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti