ການສ້າງຕົວຮັບຟັງເຫດການ

ເຫດການທີ່ເກີດຈາກໄດອາລັອກ, ເອກະສານ, ຟອມ ຫຼື ຕົວຄວບຄຸມກຣາຟິກ ສາມາດເຊື່ອມໂຍງກັບແມັກໂຄຣໄດ້ ເຊິ່ງເອີ້ນວ່າການຂຽນໂປຣແກຣມທີ່ຂັບເຄື່ອນດ້ວຍເຫດການ. ວິທີທີ່ພົບເລື້ອຍທີ່ສຸດແມ່ນການໃຊ້ແຖບ ເຫດການ ໃນເມນູ ເຄື່ອງມື – ປັບແຕ່ງ ແລະ ໜ້າຕ່າງຄຸນສົມບັດຂອງຕົວຄວບຄຸມໃນ ຕົວແກ້ໄຂໄດອາລັອກ ຈາກເມນູ ເຄື່ອງມື - ແມັກໂຄຣ – ຈັດການໄດອາລັອກ....

ສ່ວນປະກອບກຣາຟິກ, ການປ້ອນຂໍ້ມູນຜ່ານຄີບອດ, ການເຄື່ອນໄຫວເມົາສ໌ ແລະ ການໂຕ້ຕອບອື່ນໆ ສາມາດຄວບຄຸມໄດ້ໂດຍໃຊ້ UNO listeners ທີ່ຕິດຕາມພຶດຕິກຳຂອງຜູ້ໃຊ້. Listeners ແມ່ນທາງເລືອກແບບໄດນາມິກແທນການມອບໝາຍແມັກໂຄຣ. ເຮົາສາມາດສ້າງ UNO listener ໄດ້ຫຼາຍຕົວຕາມເຫດການທີ່ຕ້ອງການຕິດຕາມ. Listener ຕົວດຽວກໍສາມາດຈັດການຕົວຄວບຄຸມສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ໄດ້ຫຼາຍຕົວ.

ການສ້າງຕົວຮັບຟັງເຫດການ (event listener)

Listeners ຈະຖືກຕິດໃສ່ກັບຕົວຄວບຄຸມໃນໄດອາລັອກ, ລວມເຖິງເຫດການຂອງເອກະສານ ຫຼື ຟອມ. Listeners ຍັງຖືກໃຊ້ເມື່ອສ້າງໄດອາລັອກໃນຂະນະຣັນ ຫຼື ເມື່ອເພີ່ມຕົວຄວບຄຸມໃສ່ໄດອາລັອກແບບທັນທີ.

ຕົວຢ່າງນີ້ສ້າງ listener ສຳລັບຕົວຄວບຄຸມ Button1 ຂອງໄດອາລັອກ Dialog1 ໃນໄລບຣາຣີ Standard.

ດ້ວຍ 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 ກຳລັງຮັບຟັງ..'
         _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("ຜູ້ໃຊ້ໄດ້ຢືນຢັນໄດອາລັອກແລ້ວ.")
             elif rc == CANCEL:
                 MsgBox("ຜູ້ໃຊ້ໄດ້ຍົກເລີກໄດອາລັອກແລ້ວ.")
             ui.dispose()  # ui.endExecute
             ctl.removeActionListener(act)
             
         def createUnoDialog(libr_dlg: str, embedded=False):
             """ ສ້າງໄດອາລັອກຈາກຕຳແໜ່ງທີ່ຕັ້ງຂອງມັນ """
             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):
             """ ຮັບຟັງ ແລະ ນັບຈຳນວນການກົດປຸ່ມ """
             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):  # ຣູທິນທີ່ບັງຄັບຕ້ອງມີ
                 pass
             
         def MsgBox(txt: str):
             mb = util.MsgBox(uno.getComponentContext())
             mb.addButton("Ok")
             mb.show(txt, 0, "Python")
             
         g_exportedScripts = (Main,)
      

msgbox.py ໃນໄດເຣັກທໍຣີ {installation}/program/ ມີຕົວຢ່າງບາງອັນຂອງ button listeners.

ດ້ວຍ LibreOffice Basic


         Option Explicit
             
         Const MY_LIBRARY = "Standard", MY_DIALOG = "Dialog1", MY_BUTTON = "Button1"
         Const MY_LABEL = "Basic ກຳລັງຮັບຟັງ.."
         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 "ຜູ້ໃຊ້ໄດ້ຢືນຢັນໄດອາລັອກແລ້ວ.",, "Basic"
                 Case rc.CANCEL : MsgBox "ຜູ້ໃຊ້ໄດ້ຍົກເລີກໄດອາລັອກແລ້ວ.",, "Basic"
             End Select
             ui.dispose ' ui.endExecute()
             ctl.removeActionListener(act)
         End Sub
             
         Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
             ''' ຮັບຟັງ ແລະ ນັບຈຳນວນການກົດປຸ່ມ '''
             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
             ' ໃສ່ລະຫັດຂອງທ່ານຢູ່ບ່ອນນີ້
         End Sub ' awt_disposing
      

Event Listeners ອື່ນໆ

Listeners ມັກຈະຖືກຂຽນລະຫັດໄປພ້ອມກັບ ການເປີດໄດອາລັອກ. ມີວິທີການໃຊ້ listener ຫຼາຍຮູບແບບ ເຊັ່ນ event handlers ສຳລັບໄດອາລັອກ ຫຼື event monitors ສຳລັບເອກະສານ ຫຼື ຟອມ.

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!