Περιεχόμενα
Δείκτης 🔎︎

# Δημιουργία ακροατών συμβάντος

Συμβάντα που εμφανίζονται από διαλόγους, έγγραφα, φόρμες ή γραφικά στοιχεία ελέγχου μπορούν να συνδεθούν με μακροεντολές, που αναφέρεται ως προγραμματισμός βάσει συμβάντων. Η πιο συνηθισμένη μέθοδος συσχέτισης συμβάντων με μακροεντολές είναι στην καρτέλα Συμβάντα στο μενού Εργαλεία – Προσαρμογήκαι στο Επεξεργαστής διαλόγου από το μενού του παραθύρου ιδιοτήτων στοιχείων ελέγχου Εργαλεία – Μακροεντολές – Οργάνωση διαλόγων....

Τα γραφικά παράσιτα, οι είσοδοι πληκτρολογίου, οι μετακινήσεις ποντικιού και άλλες αλληλεπιδράσεις ανθρώπου/μηχανής μπορούν να ελεγχθούν χρησιμοποιώντας ακροατές UNO που παρακολουθούν τη συμπεριφορά του χρήστη. Ακροατές είναι κώδικες δυναμικού προγράμματος εναλλακτικοί προς τις αναθέσεις μακροεντολών. Κάποιος μπορεί να δημιουργήσει τόσους ακροατές UNO, όσο και τα συμβάντα που παρακολουθούνται. Ένας μοναδικός ακροατής μπορεί επίσης να χειριστεί πολλαπλά στοιχεία ελέγχου διεπαφής χρήστη.

## Δημιουργία ακροατή συμβάντος

Οι ακροατές προσαρτώνται στα στοιχεία ελέγχου που κρατιούνται στους διαλόγους, καθώς και σε έγγραφα ή συμβάντα φόρμας. Οι ακροατές χρησιμοποιούνται επίσης κατά τη δημιουργία διαλόγων χρόνου εκτέλεσης ή κατά την προσθήκη στοιχείων ελέγχου σε διάλογο άμεσα.

Αυτό το παράδειγμα δημιουργεί ακροατή για το στοιχείο ελέγχου 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 listens..'
             _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/ κατάλογο έχει κάποια παραδείγματα ακροατών πλήκτρου.

### Με 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 "Ο χρήστης επιβεβαίωσε τον διάλογο.",, "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

## Ακροατές άλλου συμβάντος

Οι ακροατές σας κωδικοποιούνται συνήθως μαζί με το άνοιγμα διαλόγου. Πολλές προσεγγίσεις ακροατών είναι εφικτές όπως χειρισμός συμβάντων για διαλόγους, ή παρακολουθήσεις συμβάντων για έγγραφα ή φόρμες.

Σχετικά θέματα

Παραδείγματα προγραμματισμού στοιχείων ελέγχου στον επεξεργαστή διαλόγου

Συνάρτηση CreateUnoListener

Αντιστοίχιση συμβάντων σε αντικείμενα

Δείτε επίσης Συμβάντα εγγράφου, Συμβάντα φόρμας.

Παρακολούθηση συμβάντων εγγράφου

παραδείγματα προγραμματισμού Python