Funktion CreateUnoListener

Instanziiert einen Listener.

Bei vielen Uno-Objekten können Sie Listener mit dedizierten Listener-Schnittstellen registrieren. Dies ermöglicht es, auf bestimmte Ereignisse zu lauschen und die entsprechende Listener-Methode aufzurufen. Die Funktion CreateUnoListener legt eine Listener-Schnittstelle fest, die einem UNO-Objekt zugeordnet ist. Die Listener-Schnittstelle wird dann an ihr zugeordnetes Objekt gebunden.

Syntax:


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

Parameter:

Prefix: Ein Textpräfix, das in BASIC-Subroutinen verwendet wird, die Ereignisse verarbeiten.

Typename: Ein vollständig qualifizierter UNO-Listener-Schnittstellenname.

Rückgabewert:

Der UNO-Dienst, der dem Listener-Schnittstellennamen Typename entspricht, andernfalls der Wert Null.

Beispiel:

Das folgende Beispiel lauscht auf Ereignisse, die für ein BASIC-Bibliotheksobjekt auftreten.


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

Die Methode CreateUnoListener erfordert zwei Parameter. Der erste ist Prefix und wird unten im Detail erklärt. Der zweite Parameter Typename ist der vollständig qualifizierte Name der Listener-Schnittstelle.

Jeder Listener muss für die Broadcaster-Funktion von LibreOffice registriert sein. Dies wird durchgeführt, indem jeder Listener an sein zugeordnetes Objekt gebunden wird. Bindungsmethoden folgen immer dem Muster 'addFooListener', wobei 'Foo' der Objekttyp der Listener-Schnittstelle ohne das 'X' ist. In diesem Beispiel wird die Methode addContainerListener zur Registrierung von XContainerListener aufgerufen:


Dim oLib As Object
oLib = BasicLibraries.Library1 ' Library1 muss existieren!
oLib.addContainerListener( oListener ) ' Den Listener registrieren

Der Listener ist jetzt registriert. Wenn ein Ereignis eintritt, ruft der aktive Listener die entsprechende Methode auf, die in der Schnittstelle com.sun.star.container.XContainerListener definiert ist .

Ereignisgesteuerte registrierte BASIC-Subroutinen erfordern die Verwendung eines definierten Prefix. Das BASIC-Laufzeitsystem sucht nach Subroutinen oder Funktionen mit dem Namen 'Prefix+ListenerMethod' und ruft sie auf, wenn sie gefunden werden. Andernfalls tritt ein Laufzeitfehler auf.

In diesem Beispiel definiert die Schnittstelle com.sun.star.container.XContainerListener die folgenden Methoden:

Methode

Beschreibung

disposing

Base-Schnittstelle com.sun.star.lang.XEventListener für alle Listener-Schnittstellen

elementInserted

Methode der Schnittstelle com.sun.star.container.XContainerListener

elementRemoved

Methode der Schnittstelle com.sun.star.container.XContainerListener

elementReplaced

Methode der Schnittstelle com.sun.star.container.XContainerListener


Das in diesem Beispiel verwendete 'ContListener_' impliziert, dass die folgenden Subroutinen in BASIC implementiert werden müssen:

Jede Listener-Schnittstelle definiert einen Satz kontrollierter Ereignisnamen, die Uno-Objekten zugeordnet sind. Wenn ein Ereignis eintritt, wird es als Parameter an die Methode gesendet. BASIC-Event-Methoden können sich auch gegenseitig aufrufen, solange der entsprechende Parameter in der Sub-Deklaration übergeben wird. Zum Beispiel:


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

Der Ereignisobjektparameter muss nicht eingeschlossen werden, wenn er nicht verwendet wird:


' Minimale Implementierung von Sub disposing
Sub ContListener_disposing
End Sub
warning

Listener-Methoden müssen immer implementiert werden, um BASIC-Laufzeitfehler zu vermeiden.


tip

Verwenden Sie die Bibliothekskonsole ScriptForge, wenn auf die BASIC-IDE nicht einfach zugegriffen werden kann, das heißt während der Verarbeitung von Ereignissen. Verwenden Sie die Methode DebugPrint, um alle relevanten Informationen zur Konsole hinzuzufügen. Konsoleneinträge können in eine Textdatei ausgegeben oder in einem Dialogfenster angezeigt werden. Verwenden Sie alternativ das Modul Trace der Bibliothek Access2Base.



   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

Bitte unterstützen Sie uns!