[Risolto] Calc Evento Doppio Click gestito prosegue in Edit

Creare una macro - Scrivere uno script - Usare le API
Rispondi
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

[Risolto] Calc Evento Doppio Click gestito prosegue in Edit

Messaggio da nickGiard »

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

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 7.1 (x64) su Windows 11
vladboscaneanu
Volontario
Volontario
Messaggi: 378
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Calc Evento Doppio Click gestito prosegue in Edit mode

Messaggio da vladboscaneanu »

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

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
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Calc Evento Doppio Click gestito prosegue in Edit mode

Messaggio da patel »

ciao nickGiard, ti dispiace allegare un file di esempio funzionante ?
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

[Risolto] Calc Evento Doppio Click gestito prosegue in Edit

Messaggio da nickGiard »

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

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 7.1 (x64) su Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8785
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Calc Evento Doppio Click gestito prosegue in Edit

Messaggio da charlie »

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 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

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

Messaggio da nickGiard »

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 179 volte
Nicola con LibreOffice 7.1 (x64) su Windows 11
Rispondi