Ustvarjanje poslušalcev dogodkov

Dogodki, ki jih prožijo pogovorna okna, dokumenti, obrazci ali grafični kontrolniki, so lahko povezani z makri, kar imenujemo programiranje na podlagi dogodkov. Najpogostejša načina za povezovanje dogodkov z makri sta prek zavihka Dogodki v meniju Orodja – Prilagodi in prek podokna Lastnosti kontrolnika v Urejevalniku pogovornih oken v meniju Orodja – Makri – Organiziraj pogovorna okna.

Grafični artefakti, vnosi prek tipkovnice, poteze miške in druge interakcije med človekom in strojem je mogoče nadzorovati z uporabo poslušalcev UNO, ki sledijo vedenju uporabnika. Poslušalci so alternativa dinamični programski kodi za dodelitev makrom. Eden lahko ustvari toliko poslušalcev UNO, kot je dogodkov, ki jih želi spremljati. En poslušalec lahko obravnava tudi več kontrolnikov uporabniškega vmesnika.

Ustvarjanje poslušalca dogodkov

Poslušalci so priloženi kontrolnikom v pogovornih oknih, kot tudi dogodkom dokumentov ali obrazcev. Poslušalci se uporabljajo tudi pri ustvarjanju izvajalnih pogovornih oken ali pri sprotnem dodajanju kontrolnikov v pogovorno okno.

Ta primer ustvari poslušalca za kontrolnik Gumb1 pogovornega okna PogovornoOkno1 iz knjižnice Standardno.

S Pythonom


         # -*- 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 je prisluhnil ...'
         _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("Uporabnik je potrdil pogovorno okno.")
             elif rc == CANCEL:
                 MsgBox("Uporabnik je preklical pogovorno okno.")
             ui.dispose()  # ui.endExecute
             ctl.removeActionListener(act)
             
         def createUnoDialog(libr_dlg: str, embedded=False):
             """ Ustvari pogovorno okno iz njegovega mesta """
             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):
             """ Poslušanje in štetje klikov gumbov """
             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):  # obvezna rutina
                 pass
             
         def MsgBox(txt: str):
             mb = util.MsgBox(uno.getComponentContext())
             mb.addButton("Ok")
             mb.show(txt, 0, "Python")
             
         g_exportedScripts = (Main,)
      

msgBox.py in mapa {namestitev}/program/ vsebujeta nekaj primerov poslušalcev gumbov.

Z LibreOffice Basicom


         Option Explicit
             
         Const MY_LIBRARY = "Standard", MY_DIALOG = "Dialog1", MY_BUTTON = "Button1"
         Const MY_LABEL = "Basic je prisluhnil ...«
         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
                 Case rc.OK : MsgBox "Uporabnik je potrdil pogovorno okno.",, "Basic"
                 Case rc.CANCEL : MsgBox "Uporabnik je preklical pogovorno okno.",, "Basic"
             End Select
             ui.dispose ' ui.endExecute()
             ctl.removeActionListener(act)
         End Sub
             
         Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
             ''' Poslušanje in štetje klikov gumbov '''
             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
             ' vaša koda sodi sem
         End Sub ' awt_disposing
      

Drugi poslušalci dogodkov

Poslušalci so običajno kodirani skupaj z odpiranjem pogovornega okna. Možni so številni pristopi glede poslušalca, kot so obravnalniki dogodkov za pogovorna okna ali spremljevalci dogodkov za dokumente in obrazce.

Podprite nas!