[Risolto]Evento Click viene perso

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

[Risolto]Evento Click viene perso

Messaggio da nickGiard »

Buongiorno a tutti
nella mia App di computo metrico su LibreOffice Calc uso il Doppio Click quale strumento generale di comando per attivare le macro, scelte in base alla cella selezionata.
Questo per dire e sottolineare che tale evento Click è fondamentale per una gestione dinamica e guidata da eventi.
L'evento click viene 'appiccicato' al Documento creando prima il Listener a quindi aggiungendolo al Controller del Documento:
gMouseHandler = CreateUnoListener("OnDC_", "com.sun.star.awt.XMouseClickHandler") variabile Global per ospitare permanentemente in memoria
ThisComponent.CurrentController.addMouseClickHandler(gMouseHandler)
e quindi creando le varie funzioni previste dall'interfaccia XMouseClickHandler.
Purtroppo a seguito di certe situazioni tale evento viene perso, ad esempio se faccio l'anteprima di stampa.
Qualche idea per evitare di dover prevedere una specifica e manuale azione di ripristino?

Allego file di esempio, all'apertura abilita automaticamente l'evento click, che funziona poi selezionando qualunque cella e avvisando con in messaggio. Se faccio l'anteprima di stampa e poi la chiudo, l'evento click viene perso.
Grazie per l'attenzione.
TestEventiClick.ods
File con semplici Macro di esempio Evento Click
(10.46 KiB) Scaricato 176 volte
Nicola
Ultima modifica di nickGiard il sabato 8 maggio 2021, 19:45, modificato 1 volta in totale.
Nicola con LibreOffice 7.1 (x64) su Windows 11
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Evento Click viene perso

Messaggio da Gaetanopr »

Se ci fai caso con l'anteprima di stampa si esce dalla visualizzazione dei fogli, forse per questo si perde il listener, se invece lanci direttamente la stampa noterai che non si esce dal foglio attivo, continuando così a funzionare il listener.
Per ovviare al problema associa la macro che attiva l'evento click all'evento "vista creata".
Allego tuo esempio modificato.

PS: un'altra soluzione potrebbe essere uaare gli eventi del foglio al posto dei listener


Saluti
Allegati
TestEventiClick.ods
(10.58 KiB) Scaricato 153 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Evento Click viene perso

Messaggio da nickGiard »

Grazie Gaetanopr per il riscontro, sei veramente gentile.
Esaminerò nei prossimi giorni le tue indicazioni. Ti farò sapere
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Evento Click viene perso

Messaggio da nickGiard »

Grazie Gaetanopr, consentimi di approfondire l'argomento e di imparate dalla tua esperienza.
Nella mia App l'architettura è di usare fogli di calcolo semplici, e di demandare al basic scritto in librerie gestite da un dialogo le funzionalità da aggiungere all'apertura del documento.
Questi documenti pertanto all'esterno dell'App si comportano come normali documenti, praticamente senza codice basic o Eventi che lanciano macro.
Questi diventano 'vivi' alla loro apertura via macro aggiungendo il listener, in quanto " L'evento click viene 'appiccicato' al Documento creando prima il Listener a quindi aggiungendolo al Controller del Documento: gMouseHandler = CreateUnoListener("OnDC_", "com.sun.star.awt.XMouseClickHandler") variabile Global per ospitare permanentemente in memoria ThisComponent.CurrentController.addMouseClickHandler(gMouseHandler) "
Il modo che mi consigli, come ho visto dal file che mi hai mandato, è quello di andare manualmente su Strumenti >Personalizza >Eventi >VistaCreata che rilancia la sub di creazione e assegnazione del listener. Nel mio caso è una soluzione che non gradirei.
Resta da capire se effettivamente ad ogni nuova vista si perde effettivamente l'evento doppio click, e quindi capire quale variabile possa attestare questo (gMouseHandler ??), altrimenti si avrebbero situazioni di doppio click ripetute.
Mi sembra che la questione dell'associazione via macro sia trattata da Pitonyak OOME nel cap.13.5.1. Registering your own listener per la quale gestire OnViewCreated, con l'esempio ThisComponent.Events.ReplaceByName("OnSave", mEventProps())
Visto che siamo in argomento hai informazioni sugli eventi del Foglio in Foglio Eventi, che mi sembra siano associati solo al foglio interessato, e che non trovo come associare via macro.
Grazie in anticipo per la gentile risposta
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Evento Click viene perso

Messaggio da Gaetanopr »

nickGiard ha scritto:...... Visto che siamo in argomento hai informazioni sugli eventi del Foglio in Foglio Eventi, che mi sembra siano associati solo al foglio interessato, e che non trovo come associare via macro.
Grazie in anticipo per la gentile risposta
Nicola
In questo post abbiamo affrontato questo argmento
viewtopic.php?f=9&t=7897
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Evento Click viene perso

Messaggio da nickGiard »

Moltissime grazie :D , Gaetanopr
ho dato un occhiata al post e potrebbe essere per me una soluzione alternativa al Listener. Devo confessare che oltre a perdere l'evento doppio click come avevo indicato (ed in altre situazioni quali errori runtime od altro), all'apertura del documento, e dopo aver assegnato tale Listener, si attivava effettivamente l'evento per i vari fogli solo se veniva prima eseguito il Doppio Click sul foglio di apertura (?).
Ho l'impressione, e lo verificherò a breve, che l'evento del foglio sia più stabile del listener del documento.
Grazie ancora e complimenti per la tua conoscenza di LibreOffice.
Credo di poter mettere [Risolto] ma sono imbarazzato sul come fare, non c'è un pulsantino ??
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Evento Click viene perso

Messaggio da Gaetanopr »

nickGiard ha scritto:Moltissime grazie :D , Gaetanopr
Di nulla
nickGiard ha scritto: Credo di poter mettere [Risolto] ma sono imbarazzato sul come fare, non c'è un pulsantino ??
Nicola
viewtopic.php?f=1&t=5661
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Evento Click viene perso

Messaggio da charlie »

Sistema corretto per aggiungere [Risolto] viewtopic.php?f=2&t=5661
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]Evento Click viene perso

Messaggio da nickGiard »

Sebbene ho risolto il problema, mi permetto di fare alcune disgressioni, magari a vantaggio di altri utenti.
Non avevo ben capito che la gestione degli eventi viene gestita a due livelli e con due diverse modalità:
1) Eventi principali dei fogli e del documento, gestiti sia manualmente rispettivamente con Foglio Eventi o Personalizza >Eventi, che possono essere gestiti manualmente ma anche da macro con la proprietà events di foglio o del documento o globali con GlobalEventBroadcaster (Pitonyac OOME 13.5.1 . Registering your own listener), associandoli ad una specifica macro
2)Eventi di oggetti disparati, verificando prima quali eventi tale oggetto implementa cercando i metodi add???Listener e le funzioni della corrispondente interfaccia XListener, quindi la funzione CreateUnoListener(sPrefix, XListener) crea il Listener da usare nel metodo obj.add???Listener e infine esplicitare tutti i metodi del XListener integrando il loro nome con sPrefix.

Certamente la condizione 1) è la più semplice e diretta, sempre che gli eventi previsti soddisfino le proprie esigenze, ed essendo gestibili manualmente si possono facilmente ispezionare i parametri, come ha fatto intelligentemente Gaetanopr in viewtopic.php?f=9&t=7897 , e come si può riesaminare direttamente in fase di debug con la proprietà Events com.sun.star.document.Events del Documento o del Foglio oSh, e la Structure PropertyValue ottenuta con oSh.Events.getByName([in] string aName) che rappresenta l'evento impostato, e nel mio caso:
Dim PropEvt(1) As New com.sun.star.beans.PropertyValue
PropEvt(0).Name = "EventType"
PropEvt(0).Value = "Script"
PropEvt(1).Name = "Script"
PropEvt(1).Value = "vnd.sun.star.script:MyExcel.Sh.ShOnDC?language=Basic&location=application"
ed infine associarlo via macro con oSh.Events.replaceByName("OnDoubleClick", PropEvt)
Nel caso si voglia eliminare l'associazione PropEvt deve essere uguale ad Empty.
La funzione che deve gestire l'evento, in questo caso ShOnDC, riceve un parametro evento, questo è il primo oggetto intercettato dal doppio click, non è detto che sia la cella sottostante, potrebbe essere un CellAnnotationShape nel caso ci fosse un commento nella cella limitrofa.
Il tutto esaminando il service Events.
Nicola con LibreOffice 7.1 (x64) su Windows 11
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto]Evento Click viene perso

Messaggio da Gaetanopr »

Grazie a te per il riscontro, vedo con piacere che hai approfondito abbastanza bene l'argomento :super: .
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Rispondi