Inhalte
Index 🔎︎

# Funktion CreateUnoListener

Instanziert einen Listener.

Bei vielen Uno-Schnittstellen können Sie Listener auf einer speziellen Listener-Schnittstelle registrieren. So können Sie den Eintritt bestimmter Ereignisse überwachen und daraufhin die jeweilige Listener-Methode aufrufen. Die Funktion CreateUnoListener wartet auf die aufgerufene Listener-Schnittstelle und übergibt der Schnittstelle dann ein von dieser unterstütztes Objekt. Dieses Objekt wird dann an die Methode zum Registrieren des Listeners übergeben.

## Syntax:

    oListener = CreateUnoListener( Praefixname, ListenerSchnittstelleName )

## Beispiel:

Folgendes Beispiel basiert auf einem BasicLibraries Objekt.

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

Die Methode CreateUnoListener benötigt zwei Parameter. Der erste Parameter ist ein Präfix und wird weiter unten näher beschrieben. Der zweite Parameter ist der voll qualifizierte Name der zu verwendenden Listener-Schnittstelle.

Als nächstes muss der Listener zum Broadcaster-Objekt hinzugefügt werden. Dies geschieht durch Aufruf der entsprechenden Methode zum Hinzufügen des Listeners. Diese Methoden folgen immer dem Muster "addFooListener" wobei "Foo" den Listener-Interface-Typ ohne das 'X' bezeichnet. Im Beispiel soll XContainerListener registriert werden, daher ist der Name der add-Methode addContainerListener:

    Dim oLib
    oLib = BasicLibraries.Library1 ' Library1 must exist!
    oLib.addContainerListener( oListener ) ' Register the listener

Jetzt ist der Listener registriert. Wenn ein Ereignis auftritt, das den Listener betrifft, wird die entsprechende Methode des com.sun.star.container.XContainerListener Interface aufgerufen.

Das Präfix dient zum Aufruf registrierter Listener aus Basic-Subroutinen. Das Basic-Laufzeitsystem sucht nach Basic-Subroutinen oder -Funktionen mit dem Namen "PräfixListenerMethode" und ruft diese, falls vorhanden, auf. Ist keine entsprechende Subroutine oder Funktion vorhanden, so tritt ein Laufzeitfehler auf.

In diesem Beispiel verwendet die Listener-Schnittstelle folgende Methoden:

- disposing:

- Methode des Listener base interface (com.sun.star.lang.XEventListener), deshalb von jedem Listener-Interface unterstützt (alle Listener-Interfaces sollten hiervon abgeleitet sein)

- elementInserted:

- Methode des Interface com.sun.star.container.XContainerListener

- elementRemoved:

- Methode des Interface com.sun.star.container.XContainerListener

- elementReplaced:

- Methode des Interface com.sun.star.container.XContainerListener

In diesem Beispiel ist das Präfix ContListener_. In Basic müssen also folgende Subroutinen implementiert werden:

- ContListener_disposing

- ContListener_elementInserted

- ContListener_elementRemoved

- ContListener_elementReplaced

Für jeden Listener-Typ existiert ein Ereignisstrukturtyp mit Informationen zum Ereignis. Beim Aufruf einer Listener-Methode wird dieser eine Instanz dieses Ereignisses als Parameter übergeben. Basic-Listener-Methoden können diese Ereignisobjekte auch aufrufen, sofern in der Sub-Deklaration der entsprechende Parameter übergeben wird. Beispiel:

    Sub ContListener_disposing( oEvent )
        MsgBox "disposing"
        MsgBox oEvent.Dbg_Properties
    End Sub

    Sub ContListener_elementInserted( oEvent )
        MsgBox "elementInserted"
        MsgBox oEvent.Dbg_Properties
    End Sub

    Sub ContListener_elementRemoved( oEvent )
        MsgBox "elementRemoved"
        MsgBox oEvent.Dbg_Properties
    End Sub

    Sub ContListener_elementReplaced( oEvent )
        MsgBox "elementReplaced"
        MsgBox oEvent.Dbg_Properties
    End Sub

Wird das Event object nicht benötigt, kann der Parameter weggelassen werden:

    ' Minimal implementation of Sub disposing
    Sub ContListener_disposing
    End Sub

Zur Vermeidung von Basic-Laufzeitfehlern müssen grundsätzlich Listener-Methoden implementiert werden.