„Python“ klausytojai : Kuriami įvykių klausytojai

Turinys
Rodyklė 🔎︎

# Įvykių dalyvių sukūrimas

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 Priemonės → Pritaikyta meniu ir Dialogo tvarkytuvas valdymo savybių nustatymas iš Priemonės → Makrokomandos → Organizuoti dialogus… 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.

## Sukurti įvykių agentą

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.

### Naudojant „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“ 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ų.

### Naudojant „LibreOffice Basic“

             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

## Kitų įvykių agentai

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.

Susijusios temos

Programavimo pavyzdžiai valdymui dialogų tvarkytuvėje

CreateUnoListener Function

Įvykių susiejimas su objektais

Dar žr. Documento įvykiai, Formos įvykiai.

Dialogo tvarkytuvo sukūrimas

Listening to Document Events

Python programavimo pavyzdžiai