Inhalte
Index 🔎︎

# 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:

- ContListener_disposing

- ContListener_elementInserted

- ContListener_elementRemoved

- ContListener_elementReplaced

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

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

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

Verwandte Themen

Erstellen von Ereignislistenern

Ereigniszuordnung zu Objekten

Siehe auch Dokumentereignisse, Formularereignisse.

Einen Dialog-Handler erstellen

Dokumentereignisse überwachen