Модул
Съдържание
Индекс 🔎︎

# Функция CreateUnoListener

Създава екземпляр на интерфейса Listener.

Много интерфейси на Uno ви позволяват да регистрирате слушател чрез специален интерфейс (Listener). Така можете да следите за определени събития и да извиквате съответния метод на слушателя. Функцията CreateUnoListener изчаква извикания интерфейс на слушател, след което подава на интерфейса обект, поддържан от него. Този обект се предава на метода, за да регистрира слушателя.

## Синтаксис:

    oListener = CreateUnoListener(Prefixname, ListenerInterfaceName)

## Пример:

Следващият пример е базиран на обект от библиотека на Basic.

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

Методът CreateUnoListener изисква два параметъра. Първият – префикс – е обяснен подробно по-долу. Вторият параметър е напълно квалифицирано име на интерфейса за слушател, който искате да използвате.

След това слушателят трябва да бъде добавен към обект от тип Broadcaster. Това става чрез извикване на съответния метод за добавяне на слушател. Тези методи винаги следват схемата "addFooListener", където "Foo" е типът на интерфейса за слушател без „X“. В този пример се извиква методът addContainerListener, за да се регистрира слушател от типа XContainerListener:

    Dim oLib
    oLib = BasicLibraries.Library1 ' Library1 трябва да съществува!
    oLib.addContainerListener(oListener) ' Регистрираме слушателя

Сега слушателят е регистриран. Когато възникне събитие, съответният слушател извиква подходящия метод от интерфейса com.sun.star.container.XContainerListener.

Префиксът извиква регистрирани слушатели от подпрограми на Basic. Системата за изпълнение на Basic търси процедури или функции с името „PrefixListenerMethode“ и ги извиква, ако бъдат намерени. В противен случай възниква грешка по време на изпълнение.

В този пример интерфейсът на слушател използва следните методи:

- disposing:

- Базов интерфейс Listener (com.sun.star.lang.XEventListener): базов интерфейс за всички интерфейси на слушатели

- elementInserted:

- Метод на интерфейса com.sun.star.container.XContainerListener

- elementRemoved:

- Метод на интерфейса com.sun.star.container.XContainerListener

- elementReplaced:

- Метод на интерфейса com.sun.star.container.XContainerListener

В този пример префиксът е ContListener_. Следователно в кода на Basic трябва да са реализирани следните подпрограми:

- ContListener_disposing

- ContListener_elementInserted

- ContListener_elementRemoved

- ContListener_elementReplaced

За всеки тип слушател съществува тип – структура, който съдържа информация за събитие. Когато се изпълни метод на слушателя, екземпляр на събитието се изпраща на метода като параметър. Базовите методи на слушателя също могат да извикват тези обекти – събития, стига в декларацията Sub да е включен съответният параметър. Например:

    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

Не е необходимо да включвате параметъра за обект – събитие, ако обектът не се използва:

    ' Минимална реализация на Sub disposing
    Sub ContListener_disposing
    End Sub

Методите на слушателя трябва винаги да са реализирани, за да се избегнат грешки по време на изпълнение.