Oppretting av hendingslyttarar

Hendingar som er utlĂžyste av dialogar, dokument, skjema eller grafiske kontrollar, kan koplast til makroar, som vert kalla hendingsdrive programmering. Den vanlegaste metoden for Ă„ relatera hendingar til makroar er fana Hendingar tab i menyen VerktĂžy → Tilpass og dialog-redigeringsprogram Kontroll-eigenskapar frĂ„ VerktĂžy → Makroar → Organiser makroar.

Grafiske framstillingar, tastaturunngangar, muserÞrsler og andre samhandlingar mellom menneske og maskin kan styrast ved hjelp av UNO-lyttarar som overvÄker Ätferda til brukaren. Lyttarar er dynamisk programkodealternativ til makrotildelingar. Du kan oppretta sÄ mange UNO-lyttarar som du treng for Ä overvaka hendingar. Ein enkelt lyttar kan ogsÄ handsama fleire brukargrensesnitt-kontrollar.

Slik lagar du ein hendingslyttar

Lyttarane vert knytte til kontrollelement i dialogar og til dokument- eller skjemahendingar. Lyttarar vert ogsÄ brukte nÄr du lagar kÞyretidsdialogar eller kontrollelement i farta.

Dette eksempelet lagar ein lyttar til kontrollelementet Button1i dialogvindauget Dialog1 i biblioteket Standard.

Med Python


         # -*- 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 lyttar 
'
         _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("Brukaren har sett og forstÄtt meldinga.")
             elif rc == CANCEL:
                 MsgBox("Brukaren har avslÄtt meldinga.")
             ui.dispose()  # ui.endExecute
             ctl.removeActionListener(act)
             
         def createUnoDialog(libr_dlg: str, embedded=False):
             """ Lag eit dialogvindauge ut frÄ plasseringa av det """
             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):
             """ Lytt efter og tel kor mange klikk pÄ knappar """
             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):  # obligatorisk rutine
                 pass
             
         def MsgBox(txt: str):
             mb = util.MsgBox(uno.getComponentContext())
             mb.addButton("Ok")
             mb.show(txt, 0, "Python")
             
         g_exportedScripts = (Main,)
      

msgbox.py i {installation}/program/-katalogen har nokre eksempel pÄ knapp-lyttarar.

Med LibreOffice Basic


         Option Explicit
             
         Const MY_LIBRARY = "Standard", MY_DIALOG = "Dialog1", MY_BUTTON = "Button1"
         Const MY_LABEL = "Basic lyttar 
"
         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 "Brukaren har sett og forstÄtt meldinga.",, "Basic"
                 Case rc.CANCEL : MsgBox "Brukaren har avvist meldinga.",, "Basic"
             End Select
             ui.dispose ' ui.endExecute()
             ctl.removeActionListener(act)
         End Sub
             
         Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
             """ Lytt efter og tel kor mange klikk pÄ knappar """
             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
             ' her kjem koden din
         End Sub ' awt_disposing
      

Andre hendings-lyttarar

Lyttarane vert normalt koda saman med dialogopning. Det er mogleg med mange lyttarar samtidig, for eksempel hendingshandsamarar for dialogvindauge eller hendingsovervaking av dokument eller skjema.