Pomoč Collabora Office 24.04
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 in prek podokna Lastnosti kontrolnika v Urejevalniku pogovornih oken v meniju .
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.
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.
# -*- 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.
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
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.