IBM Lotus Symphony
|
Erstellt eine Listener-Instanz.
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 CreateUnoListener-Funktion 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.
oListener = CreateUnoListener( Praefixname, ListenerSchnittstelleName )
Folgendes Beispiel basiert auf einem BasicLibraries Objekt.
Dim oListener
oListener = CreateUnoListener( "ContListener_","com.sun.star.container.XContainerListener" )
Die CreateUnoListener-Methode 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 Listener-Schnittstelle, die Sie verwenden möchten.
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-Schnittstellentyp ohne das 'X' bezeichnet. Im Beispiel soll XContainerListener registriert durch den Aufruf der addContainerListener-Methode registriert werden:
Dim oLib
oLib = BasicLibraries.Library1 ' Library1 muss vorhanden sein
oLib.addContainerListener( oListener ) ' Listener Registrieren
Jetzt ist der Listener registriert. Wenn ein Ereignis auftritt, das den Listener betrifft, wird die entsprechende Methode der com.sun.star.container.XContainerListener-Schnittstelle 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:
Listener-Basisschnittstelle (com.sun.star.lang.XEventListener): Basisschnittstelle aller Listener-Schnittstellen
elementInserted:
Methode der com.sun.star.container.XContainerListener-Schnittstelle
elementRemoved:
Methode der com.sun.star.container.XContainerListener-Schnittstelle
elementReplaced:
Methode der com.sun.star.container.XContainerListener-Schnittstelle
In diesem Beispiel lautet 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 Ereignisobjekt 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. |