Funkcja CreateUnoListener

Funkcja tworzy instancję obiektu Listener (odbiornik).

Wiele obiektów UNO umożliwia rejestrację odbiorników za pomocą specjalnego interfejsu. Możesz więc nasłuchiwać określonych zdarzeń i wywołać odpowiednią metodę nasłuchiwania. Funkcja CreateUnoListener ustawia interfejs nasłuchiwania powiązany z obiektem UNO. Ten interfejs jest następnie powiązany z przypisanym mu obiektem.

Składnia:


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

Parametry:

Prefix: Przedrostek tekstowy używany w podprogramach języka BASIC obsługujących zdarzenia.

Typename: W pełni kwalifikowana nazwa interfejsu odbiornika UNO.

Zwracana wartość:

Usługa UNO odpowiadająca nazwie interfejsu odbiornika Typename lub wartości Null.

Przykład:

Poniższy przykład nasłuchuje zdarzeń, które występują dla obiektu biblioteki BASIC.


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

Metoda CreateUnoListener wymaga dwóch parametrów. Pierwszym z nich jest Prefix, który został szczegółowo wyjaśniony poniżej. Drugi parametr Typename to pełna nazwa interfejsu odbiornika.

Każdy odbiornik musi być zarejestrowany w funkcji nadawcy LibreOffice. Odbywa się to poprzez powiązanie każdego odbiornika z powiązanym z nim obiektem. Metody wiązania zawsze są zgodne ze wzorcem 'addFooListener', gdzie 'Foo' jest typem obiektu interfejsu odbiornika bez 'X'. W tym przykładzie metoda addContainerListener jest wywoływana w celu rejestracji XContainerListener:


Dim oLib As Object
oLib = BasicLibraries.Library1 ' Biblioteka Library1 musi istnieć
oLib.addContainerListener( oListener ) ' Rejestracja odbiornika

Odbiornik jest teraz zarejestrowany. Gdy wystąpi zdarzenie, aktywny odbiornik wywołuje odpowiednią metodę zdefiniowaną w interfejsie com.sun.star.container.XContainerListener.

Rejestrowane procedury języka BASIC wyzwalane zdarzeniami wymagają parametru Prefix. W czasie wykonywania BASIC szuka procedur lub funkcji o nazwie 'Prefix+ListenerMethod' i wywołuje je, gdy zostaną znalezione. W przeciwnym razie wystąpi błąd czasu wykonywania.

W tym przykładzie interfejs com.sun.star.container.XContainerListener określa następujące metody:

metoda

opis

disposing

Podstawowy interfejs com.sun.star.lang.XEventListener dla wszystkich interfejsów odbiornika

elementInserted

Metoda interfejsu com.sun.star.container.XContainerListener

elementRemoved

Metoda interfejsu com.sun.star.container.XContainerListener

elementReplaced

Metoda interfejsu com.sun.star.container.XContainerListener


'ContListener_' użyty w tym przykładzie sugeruje, że w języku BASIC należy zaimplementować następujące podprogramy:

Każdy interfejs nasłuchujący określa zestaw kontrolowanych nazw zdarzeń powiązanych z obiektami UNO. Gdy wystąpi zdarzenie, jest ono wysyłane do metody jako parametr. Metody zdarzeń BASIC mogą również wywoływać się nawzajem, o ile odpowiedni parametr zostanie przekazany w deklaracji Sub. Na przykład:


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

Nie trzeba dołączać parametru obiektu zdarzenia, gdy nie jest używany:


' Minimalna implementacja programu Sub disposing (wyrzucanie)
Sub ContListener_disposing
End Sub
warning

Metody nasłuchiwania muszą być zawsze implementowane, aby uniknąć błędów wykonania BASIC.


tip

Użyj konsoli biblioteki ScriptForge, gdy IDE BASIC nie jest łatwo dostępny, czyli podczas przetwarzania zdarzeń. Użyj metody DebugPrint, aby dodać odpowiednie informacje do konsoli. Wpisy konsoli można zrzucić do pliku tekstowego lub zwizualizować w oknie dialogowym. Użyj modułu Trace biblioteki Access2Base jako alternatywy



   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

Prosimy o wsparcie!