Pannello di Controllo Moderatore ]

[Risolto]Evento Click viene perso

Creare una macro - Scrivere uno script - Usare le API

[Risolto]Evento Click viene perso

Messaggioda nickGiard » martedì 20 aprile 2021, 10:26

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 36 volte

Nicola
Ultima modifica di nickGiard il sabato 8 maggio 2021, 19:45, modificato 1 volta in totale.
Nicola con LibreOffice 6.4 (x64) su Windows 10
nickGiard
 
Messaggi: 33
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Evento Click viene perso

Messaggioda Gaetanopr » sabato 1 maggio 2021, 0:12

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 15 volte
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2903
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Evento Click viene perso

Messaggioda nickGiard » domenica 2 maggio 2021, 12:03

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

Re: Evento Click viene perso

Messaggioda nickGiard » venerdì 7 maggio 2021, 22:27

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 6.4 (x64) su Windows 10
nickGiard
 
Messaggi: 33
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Evento Click viene perso

Messaggioda Gaetanopr » venerdì 7 maggio 2021, 23:45

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
https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=7897
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2903
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Evento Click viene perso

Messaggioda nickGiard » sabato 8 maggio 2021, 10:02

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 6.4 (x64) su Windows 10
nickGiard
 
Messaggi: 33
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Evento Click viene perso

Messaggioda Gaetanopr » sabato 8 maggio 2021, 10:10

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

https://forum.openoffice.org/it/forum/viewtopic.php?f=1&t=5661
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2903
Iscritto il: mercoledì 21 novembre 2012, 21:07

Re: Evento Click viene perso

Messaggioda charlie » sabato 8 maggio 2021, 18:43

Sistema corretto per aggiungere [Risolto] viewtopic.php?f=2&t=5661
charlie
macOS 10.12 Sierra: Open Office 4.1.9 - LibreOffice 6.4.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 7551
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: [Risolto]Evento Click viene perso

Messaggioda nickGiard » martedì 11 maggio 2021, 14:59

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 6.4 (x64) su Windows 10
nickGiard
 
Messaggi: 33
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: [Risolto]Evento Click viene perso

Messaggioda Gaetanopr » mercoledì 12 maggio 2021, 15:36

Grazie a te per il riscontro, vedo con piacere che hai approfondito abbastanza bene l'argomento :super: .
Openoffice 4.1 su windows xp
Gaetanopr
Volontario
Volontario
 
Messaggi: 2903
Iscritto il: mercoledì 21 novembre 2012, 21:07


Torna a Macro e UNO API

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti