Collabora Office 24.04 Súgó
A párbeszédablakok, dokumentumok, űrlapok vagy grafikus vezérlők által kiváltott események makrókhoz kapcsolhatók, amit eseményvezérelt programozásnak nevezünk. Az események makrókhoz való kapcsolásának leggyakoribb módszere az Events lapja és a Párbeszédablak-szerkesztő vezérlő tulajdonságai panel az menüből.
menüA grafikus tárgyak, billentyűzetbemenetek, egérmozgások és egyéb ember-gép interakciók UNO figyelőkkel vezérelhetők, amelyek figyelik a felhasználó viselkedését. A figyelők a makró hozzárendelések dinamikus programkód alternatívái. Annyi UNO-hallgatót hozhatunk létre, ahány eseményre figyelni szeretnénk. Egyetlen figyelő több felhasználói felületvezérlőt is kezelhet.
Listeners get attached to controls held in dialogs, as well as to document or form events. Listeners are also used when creating runtime dialogs or when adding controls to a dialog on the fly.
This example creates a listener for Button1 control of Dialog1 dialog in Standard library.
# -*- 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 listens..'
_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("The user acknowledged the dialog.")
elif rc == CANCEL:
MsgBox("The user canceled the dialog.")
ui.dispose() # ui.endExecute
ctl.removeActionListener(act)
def createUnoDialog(libr_dlg: str, embedded=False):
""" Create a Dialog from its location """
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):
""" Listen to & count button clicks """
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): # mandatory routine
pass
def MsgBox(txt: str):
mb = util.MsgBox(uno.getComponentContext())
mb.addButton("Ok")
mb.show(txt, 0, "Python")
g_exportedScripts = (Main,)
msgbox.py in {installation}/program/ directory has some examples of button listeners.
Option Explicit
Const MY_LIBRARY = "Standard", MY_DIALOG = "Dialog1", MY_BUTTON = "Button1"
Const MY_LABEL = "Basic listens.."
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 "The user acknowledged the dialog.",, "Basic"
Case rc.CANCEL : MsgBox "The user canceled the dialog.",, "Basic"
End Select
ui.dispose ' ui.endExecute()
ctl.removeActionListener(act)
End Sub
Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
''' Listen to & count button clicks '''
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
' your code goes here
End Sub ' awt_disposing
Listeners are usually coded along with dialog opening. Numerous listener approaches are possible such as event handlers for dialogs or event monitors for documents or forms.