Pśisłuchaki Python: Tšojeńske pśisłuchaki napóraś

Wopśimjeśe

# Tšojeńske pśisłuchaki napóraś

Tšojenja, kótarež se pśez dialogi, dokumenty, formulary abo grafiske wóźeńske elementy wuwabiju, daju se z makrami zwězaś, kótarež se pśez tšojenje wóźone programěrowanje pomjenjuju. Nejwěcej zwucona metoda, aby tšojenja z makrami do póśěga stajiła, su rejtarik Tšojenja w meniju Rědy – Pśiměriś a wóźeńske kakosći w dialogowem editorje z menija Rědy – Makra – Dialogi zastojaś….

Grafiske rědy, tastaturowe zapódaśa, pógiby myški a druge interakcije mjazy cłowjekom a mašinu daju se z pomocu UNO-pśisłuchakow wóźiś, kótarež na zaźarženje wužywarja glědaju. Pśisłuchaki su dynamiske alternatiwy programowego koda za makrowe pśipokazanja. Daju se tak wjele UNO-pśisłuchakow ako tšojenja napóraś, na kótarež se maju źiwaś. Jadnotliwy pśisłuchak móžo teke z někotarymi wóźeńskimi elementami wužywaŕskego pówjercha wobchadaś.

## Tšojeński pśisłuchak napóraś

Pśisłuchaki se k wóźeńskim elementam pśipowjesaju, kótarež su w dialogach wopśimjone, ako teke k dokumentowym abo formularowym tšojenjam. Pśisłuchaki se teke wužywaju, gaž se dialogi casa wužywanja napóraju abo gaž se dialogoju wóźeńske elementy tak pśipódla pśidawaju.

Toś ten pśikład pśisłuchak za wóźenje Button1 dialoga Dialog1 w bibliotece Standard napórajo.

### Z 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 pśisłucha.'
             _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(„Wužywaŕ jo wobkšuśił dialog.“)
                 elif rc == CANCEL:
                     MsgBox(„Wužywaŕ jo pśetergnuł dialog.“)
                 ui.dispose()  # ui.endExecute
                 ctl.removeActionListener(act)

             def createUnoDialog(libr_dlg: str, embedded=False):
                 """ Dialog z jogo městna napóraś """
                 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):
                 """ Pśisłuchaś a kliknjenja tłocaškow licyś """
                 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): # obligatoriska rutina
                     pass

             def MsgBox(txt: str):
                 mb = util.MsgBox(uno.getComponentContext())
                 mb.addButton("Ok")
                 mb.show(txt, 0, "Python")

             g_exportedScripts = (Main,)

Zapis msgbox.py w {installation}/program/ někotare pśikłady tłocaškowych pśisłuchakow wopśimujo.

### Z LibreOffice Basic

             Option Explicit

             Const MY_LIBRARY = "Standard", MY_DIALOG = "Dialog1", MY_BUTTON = "Button1"
             Const MY_LABEL = "Basic pśisłucha."
             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 „Wužywaŕ jo wobkšuśił dialog.“,, "Basic"
                     Case rc.CANCEL : MsgBox "Wužywaŕ jo pśetergnuł dialog.",, "Basic"
                 End Select
                 ui.dispose ' ui.endExecute()
                 ctl.removeActionListener(act)
             End Sub

             Private Sub awt_actionPerformed(evt As com.sun.star.awt.ActionEvent)
                 """ Kliknjenja tłocaškow pśisłuchaś a licyś """
                 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
                 ' waš kod sem słuša
             End Sub ' awt_disposing

## Druge tšojeńske pśisłuchaki

Pśisłuchaki se zwětšego gromaźe z dialogowym wócynjanim koděrujo. Wjele pśistupow jo móžne ako na pśikład tšojeńske pśeźěłowaki za dialogi abo tšojeńske monitory za dokumenty abo formulary.

Pódobne temy

Programěrowańske pśikłady za wóźeńske elementy w dialogowem editorje

CreateUnoListener Function

Pśirědowanje tšojenjow objektam

Glejśo teke dokumentowe tšojenja, formularowe tšojenja.

Dialogowy pśeźěłowak napóraś

Dokumentowe tšojenja doglědowaś

programěrowańske pśikłady Python

Pšosym pódprějśo nas!