Συνάρτηση CreateUnoListener

Δημιουργεί ένα στιγμιότυπο ακροάσεως.

Πολλά αντικείμενα Uno σάς επιτρέπουν να καταχωρείτε ακροατές με αποκλειστικές διεπαφές ακροατών. Αυτό επιτρέπει την ακρόαση για συγκεκριμένα συμβάντα και την κλήση της κατάλληλης μεθόδου ακροατή. Η συνάρτηση CreateUnoListener ορίζει μια διεπαφή ακροατή που σχετίζεται με ένα αντικείμενο UNO. Η διεπαφή ακροατή στη συνέχεια δεσμεύεται στο συσχετισμένο αντικείμενο της.

Σύνταξη:


    CreateUnoListener( Prefix As String, Typename As String) As Object

Παράμετροι:

Prefix>: Ένα πρόθεμα κειμένου που χρησιμοποιείται στις υπορουτίνες BASIC που χειρίζονται συμβάντα.

Typename: Ένα πλήρως πιστοποιημένο όνομα διεπαφής ακροατή UNO.

Επιστρεφόμενη τιμή:

Η υπηρεσία UNO που αντιστοιχεί στο όνομα διεπαφής ακροατή Typename, αλλιώς τιμή Null.

Παράδειγμα:

Το ακόλουθο παράδειγμα ακούει συμβάντα που συμβαίνουν για ένα αντικείμενο βιβλιοθήκης BASIC.


Dim oListener As Object
oListener = CreateUnoListener( "ContListener_","com.sun.star.container.XContainerListener" )

Η μέθοδος CreateUnoListener απαιτεί δύο παραμέτρους. Η πρώτη είναι Prefix και εξηγείται λεπτομερώς παρακάτω. Η δεύτερη παράμετρος Typename είναι το πλήρως αναγνωρισμένο όνομα της διεπαφής ακροατή.

Κάθε ακροατής πρέπει να είναι εγγεγραμμένος στη δυνατότητα εκπομπής του LibreOffice. Αυτό εκτελείται δεσμεύοντας κάθε ακροατή στο συσχετισμένο αντικείμενο του. Οι μέθοδοι δέσμευσης ακολουθούν πάντα το μοτίβο 'addFooListener', όπου το 'Foo' είναι ο τύπος αντικειμένου της διεπαφής ακροατή, χωρίς το 'X'. Σε αυτό το παράδειγμα, η μέθοδος addContainerListener καλείται για την εγγραφή του XContainerListener:


Dim oLib As Object
oLib = BasicLibraries.Library1 ' Η Library1πρέπει να υπάρχει!
oLib.addContainerListener( oListener ) ' Καταχώριση του ακροατή

Ο ακροατής είναι πλέον εγγεγραμμένος. Όταν συμβαίνει ένα συμβάν, ο ενεργός ακροατής καλεί την κατάλληλη μέθοδο που ορίζεται στη διεπαφή com.sun.star.containerL.Xistener.

Οι καταχωρημένες υπορουτίνες BASIC βάσει συμβάντων απαιτούν τη χρήση ενός καθορισμένου Prefix. Το σύστημα χρόνου εκτέλεσης BASIC αναζητά υπορουτίνες ή συναρτήσεις που φέρουν το όνομα 'Prefix+ListenerMethod' και τις καλεί όταν βρεθούν. Διαφορετικά, παρουσιάζεται σφάλμα χρόνου εκτέλεσης.

Σε αυτό το παράδειγμα, η διεπαφή com.sun.star.container.XContainerListener ορίζει τις ακόλουθες μεθόδους:

μέθοδος

περιγραφή

disposing

Διεπαφή base com.sun.star.lang.XEventListener για όλες τις διεπαφές ακροατών

elementInserted

Μέθοδος της διεπαφής com.sun.star.container.XContainerListener

elementRemoved

Μέθοδος της διεπαφής com.sun.star.container.XContainerListener

elementReplaced

Μέθοδος της διεπαφής com.sun.star.container.XContainerListener


Το 'ContListener_' που χρησιμοποιείται σε αυτό το παράδειγμα υποδηλώνει ότι οι ακόλουθες υπορουτίνες πρέπει να υλοποιηθούν στη BASIC:

Every listener interface defines a set of controlled event names associated to Uno objects. When an event occurs, it is sent to the method as a parameter. BASIC event methods can also call one another, as long as the appropriate parameter is passed in the Sub declaration. For example:


Sub ContListener_disposing( oEvent As com.sun.star.lang.EventObject )
    MsgBox "disposing"
End Sub
 
Sub ContListener_elementInserted( oEvent As com.sun.star.container.ContainerEvent )
    MsgBox oEvent.Source.' "elementInserted"
End Sub
 
Sub ContListener_elementRemoved( oEvent As com.sun.star.container.ContainerEvent )
    MsgBox "elementRemoved"
End Sub
 
Sub ContListener_elementReplaced( oEvent As com.sun.star.container.ContainerEvent )
    MsgBox "elementReplaced"
End Sub

Not need to include the event object parameter when not used:


' Ελάχιστη υλοποίηση της διάθεσης Sub
Sub ContListener_disposing
End Sub
warning

Listener methods must always be implemented to avoid BASIC run-time errors.


tip

Use ScriptForge library console when the BASIC IDE is not easily accessible, that is during events processing. Use the DebugPrint method to add any relevant information to the console. Console entries can be dumped to a text file or visualized in a dialog window. Use Trace module of Access2Base library as an alternative



   Sub SF_Trace
      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      svc = CreateScriptService("ScriptForge.Exception")
      svc.Console modal:=False
      svc.DebugPrint("Lorem", "Ipsum", "...")
   End Sub ' SF_Trace
   
   Sub A2B_Trace
      GlobalScope.BasicLibraries.LoadLibrary("Access2Base")
      Access2Base.Trace.DebugPrint("Lorem", "Ipsum", "...")
      Access2Base.Trace.TraceConsole()
   End Sub ' A2B_Trace