LibreOffice 25.2 žinynas
Dialogų, dokumentų, formų ar grafinių valdiklių įvykiai gali būti susieti su makrokomandomis, kurios vadinamos įvykių programavimu. Dažniausias metodas susieti įvykius su makrokomandomis yra Įvykiai tab in meniu ir Dialogo tvarkytuvas valdymo savybių nustatymas iš meniu.
Grafinius artefaktus, klaviatūros įvestis, pelės judesius ir kitas žmogaus ar mašinos sąveikas galima valdyti naudojant UNO agentus, kurie stebi vartotojo elgesį. Agentai yra dinamiškos programos kodo alternatyvos makrokomandoms. Galima sukurti tiek UNO agentų, kiek yra įvykių, kuriuos reikia stebėti. Vienas agentas taip pat gali valdyti kelis vartotojo sąsajos valdiklius.
Agentai ausiejami su dialogo lange valdomais valdikliais, taip pat su dokumentų ar įvykių formavimu. Agentai taip pat naudojami kuriant vykdymo dialogo langus arba pridedant valdiklius prie dialogo langelio.
Šiuo pavyzdžiu sukuriamas agentas, skirtas valdyti Mygtukas1 dialogo lange Dialogas1, kuris yra Standartinis bibliotekoje.
# -*- 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“ agentai…'
_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("Vartotojas dėkoja dialogui.")
elif rc == CANCEL:
MsgBox("Vartotojas nutraukė dialogą.")
ui.dispose() # ui.endExecute
ctl.removeActionListener(act)
def createUnoDialog(libr_dlg: str, embedded=False):
""" Sukurti dialogą iš vietos """
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):
""" Atsižvelgti į & count mygtuko spustelėjimus """
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): # privaloma paprogramė
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/ kataloge yra keletas mygtuko agentų pavyzdžių.
Option Explicit
Const MY_LIBRARY = "Standard", MY_DIALOG = "Dialog1", MY_BUTTON = "Button1"
Const MY_LABEL = "„Basic“ agentai…"
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 "Vartotojas įvertina dialogą.",, "Basic"
Case rc.CANCEL : MsgBox "Vartotojas nutraukia dialogą.",, "Basic"
End Select
ui.dispose ' ui.endExecute()
ctl.removeActionListener(act)
End Sub
Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
"' Atsižvelgti į & count mygtuko spustelėjimus '"
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
' jūsų kodas eina čia
End Sub ' awt_disposing
Agentai paprastai programuoja drauge su dialogo atvėrimas. Galimi įvairūs agentų metodai, pavyzdžiui, dialogų įvykių tvarkytuvai arba dokumentų ar formų įvykių stebėsena.