Aide Collabora Office 24.04
Les événements déclenchés par des boîtes de dialogue, des documents, des formulaires ou des contrôles graphiques peuvent être liés à des macros, c'est ce que l'on appelle la programmation événementielle. La méthode la plus courante pour lier des événements à des macros est l'onglet Événements du menu et le panneau de propriétés des contrôles de l'élément Éditeur de boîte de dialogue du menu .
Les artefacts graphiques, les entrées au clavier, les mouvements de la souris et d'autres interactions homme / machine peuvent être contrôlés à l'aide d'auditeurs (listeners) UNO qui surveillent le comportement de l'utilisateur. Les auditeurs sont des alternatives dynamiques de code de programme aux affectations de macros. On peut créer autant d'auditeurs UNO que d'événements à surveiller. Un seul auditeur peut également gérer plusieurs contrôles d'interface utilisateur.
Les auditeurs sont attachés aux contrôles contenus dans les boîtes de dialogue, ainsi qu'aux documents ou aux événements de formulaire. Les auditeurs sont également utilisés lors de la création de boîtes de dialogue d'exécution ou lors de l'ajout de contrôles à une boîte de dialogue à la volée.
Cet exemple crée un auditeur pour le contrôle Button1 de la boîte de dialogue Dialog1 dans la bibliothèque Standard.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno, unohelper
from com.sun.star.awt import XActionListener
from com.sun.star.awt import ActionEvent
from com.sun.star.lang import EventObject
from com.sun.star.ui.dialogs.ExecutableDialogResults \
import OK, CANCEL
import msgbox as util
_MY_BUTTON = "Button1"
_MY_LABEL = 'Python écoute..'
_DLG_PROVIDER = "com.sun.star.awt.DialogProvider"
def Main(*args):
ui = createUnoDialog("Standard.Dialog1", embedded=True)
ui.Title = "Python X[any]Listener"
ctl = ui.getControl(_MY_BUTTON)
ctl.Model.Label = _MY_LABEL
act = ActionListener()
ctl.addActionListener(act)
rc = ui.execute()
if rc == OK:
MsgBox("L'utilisateur a validé la boîte de dialogue.")
elif rc == CANCEL:
MsgBox("L'utilisateur a annulé la boîte de dialogue.")
ui.dispose() # ui.endExecute
ctl.removeActionListener(act)
def createUnoDialog(libr_dlg: str, embedded=False):
""" Crée une boîte de dialogue depuis son emplacement """
smgr = XSCRIPTCONTEXT.getComponentContext().ServiceManager
if embedded:
model = XSCRIPTCONTEXT.getDocument()
dp = smgr.createInstanceWithArguments(_DLG_PROVIDER, (model,))
location = "?location=document"
else:
dp = smgr.createInstanceWithContext(_DLG_PROVIDER, ctx)
location = "?location=application"
dlg = dp.createDialog("vnd.sun.star.script:"+libr_dlg+location)
return dlg
class ActionListener(unohelper.Base, XActionListener):
""" Écoute & compte les clics sur le bouton """
def __init__(self):
self.count = 0
def actionPerformed(self, evt: ActionEvent):
self.count = self.count + 1
#mri(evt)
if evt.Source.Model.Name == _MY_BUTTON:
evt.Source.Model.Label = _MY_LABEL+ str( self.count )
return
def disposing(self, evt: EventObject): # routine obligatoire
pass
def MsgBox(txt: str):
mb = util.MsgBox(uno.getComponentContext())
mb.addButton("Ok")
mb.show(txt, 0, "Python")
g_exportedScripts = (Main,)
Le dossier msgbox.py dans {installation}/program/ présente quelques exemples d'auditeurs de boutons.
Option Explicit
Const MY_LIBRARY = "Standard", MY_DIALOG = "Dialog1", MY_BUTTON = "Button1"
Const MY_LABEL = "Basic écoute.."
Dim count As Integer
Sub Main
Dim libr As Object ' com.sun.star.script.XLibraryContainer
Dim dlg As Object
Dim ui As Object ' stardiv.Toolkit.UnoDialogControl
Dim ctl As Object ' stardiv.Toolkit.UnoButtonControl
Dim act As Object ' com.sun.star.awt.XActionListener
Dim rc As Object : rc = com.sun.star.ui.dialogs.ExecutableDialogResults
BasicLibraries.LoadLibrary(MY_LIBRARY)
libr = DialogLibraries.GetByName(MY_LIBRARY)
dlg = libr.GetByName(MY_DIALOG)
ui = CreateUnoDialog(dlg)
ui.Title = "Basic X[any]Listener example"
count = 0
ctl = ui.GetControl(MY_BUTTON)
ctl.Model.Label = MY_LABEL
act = CreateUnoListener("awt_", "com.sun.star.awt.XActionListener")
ctl.addActionListener(act)
Select Case ui.Execute
L'utilisateur a validé la boîte de dialogue
Case rc.CANCEL : MsgBox "L'utilisateur a annulé la boîte de dialogue .",, "Basic"
End Select
ui.dispose ' ui.endExecute()
ctl.removeActionListener(act)
End Sub
Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
''' Auditer et compter les clics sur le bouton '''
With evt.Source.Model
If .Name = MY_BUTTON Then
count = count + 1
.Label = MY_LABEL+Cstr(count)
End If
End With
End Sub ' awt_actionPerformed
Private Sub awt_disposing(evt As com.sun.star.lang.EventObject) ' mandatory Sub
' votre code ici
End Sub ' awt_disposing
Les auditeurs sont généralement codés avec ouverture de dialogue. De nombreuses approches d'audit sont possibles, telles que les gestionnaires d'événements pour les boîtes de dialogue ou les moniteurs d'événements pour les documents ou les formulaires.