Paglikha ng Mga Tagapakinig ng Kaganapan

Ang mga kaganapang itinaas ng mga dialog, dokumento, form o graphical na kontrol ay maaaring i-link sa mga macro, na tinutukoy bilang event-driven na programming. Ang pinakakaraniwang paraan upang maiugnay ang mga kaganapan sa mga macro ay ang Mga kaganapan tab in Mga Tool – I-customize menu at ang Editor ng Dialog Kontrolin ang pane ng mga katangian mula sa Mga Tool - Macros - Ayusin ang mga Dialog... menu.

Maaaring kontrolin ang mga graphical artifact, keyboard input, mouse moves at iba pang pakikipag-ugnayan ng tao/machine gamit ang mga tagapakinig ng UNO na nagbabantay sa gawi ng user. Ang mga tagapakinig ay mga alternatibong dynamic na program code sa mga macro assignment. Ang isa ay maaaring lumikha ng maraming tagapakinig ng UNO bilang mga kaganapan na dapat abangan. Ang isang tagapakinig ay maaari ding pangasiwaan ang maramihang mga kontrol ng user interface.

Paglikha ng tagapakinig ng kaganapan

Ang mga tagapakinig ay nakakabit sa mga kontrol na gaganapin sa mga dialog, gayundin sa pagdodokumento o pagbuo ng mga kaganapan. Ginagamit din ang mga tagapakinig kapag gumagawa ng mga runtime na dialog o kapag nagdaragdag ng mga kontrol sa isang dialog nang mabilis.

Ang halimbawang ito ay lumilikha ng isang tagapakinig para sa Pindutan1 kontrol ng Dialog1 diyalogo sa Pamantayan aklatan.

Gamit ang 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 = 'Nakikinig si Python..'
         _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("Kinilala ng user ang dialog.")
             elif rc == CANCEL:
                 MsgBox("Kinansela ng user ang dialog.")
             ui.dispose()  # ui.endExecute
             ctl.removeActionListener(act)
             
         def createUnoDialog(libr_dlg: str, embedded=False):
             """ Lumikha ng isang Dialog mula sa lokasyon nito """
             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):
             """ Makinig at bilangin ang mga pag-click sa button na """
             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): # mandatoryong gawain
                 pass
             
         def MsgBox(txt: str):
             mb = util.MsgBox(uno.getComponentContext())
             mb.addButton("Ok")
             mb.show(txt, 0, "Python")
             
         g_exportedScripts = (Main,)
      

msgbox.py sa {installation}/programa/ direktoryo ay may ilang mga halimbawa ng mga tagapakinig ng button.

Gamit ang LibreOffice Basic


         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 "Kinilala ng user ang dialog.",, "Basic"
                 Case rc.CANCEL : MsgBox "Kinansela ng user ang dialog.",, "Basic"
             End Select
             ui.dispose ' ui.endExecute()
             ctl.removeActionListener(act)
         End Sub
             
         Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
             ''' Makinig at bilangin ang mga pag-click sa button '''
             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
             ' ang iyong code ay napupunta dito
         End Sub ' awt_disposing
      

Iba pang mga Tagapakinig ng Kaganapan

Ang mga tagapakinig ay karaniwang naka-code kasama ng pagbubukas ng diyalogo . Maraming mga diskarte sa tagapakinig ang posible tulad ng mga tagapangasiwa ng kaganapan para sa mga diyalogo o monitor ng kaganapan para sa mga dokumento o form.

Mangyaring suportahan kami!