Функция CreateUnoListener

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

Много обекти на UNO ви позволяват да регистрирате слушатели със специализирани интерфейси. Това позволява слушане за специфични събития и извикване на подходящия метод на слушател. Функцията CreateUnoListener задава интерфейс на слушател, свързан с UNO обект. След това интерфейсът на слушател се обвързва със свързания с него обект.

Синтаксис:


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

Параметри:

Prefix: текстов префикс, използван в подпрограмите на BASIC, които обработват събития.

Typename: напълно квалифицирано име на интерфейс на слушател на UNO.

Резултат:

UNO услугата, съответстваща на името на интерфейса на слушател Typename, в противен случай Null.

Пример:

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


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

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

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


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

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

Управляваните от събития регистрирани подпрограми на BASIC изискват използването на дефиниран префикс. Системата за изпълнение на BASIC търси процедури или функции с името „Префикс+МетодНаСлушателя“ и ги извиква, ако бъдат намерени. В противен случай възниква грешка по време на изпълнение.

В този пример интерфейсът com.sun.star.container.XContainerListener дефинира следните методи:

Метод

Описание

disposing

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:

Всеки интерфейс на слушател дефинира набор от имена на контролирани събития, свързани с UNO обекти. Когато възникне събитие, то се изпраща на метода като параметър. Методите на BASIC за събития могат също да се извикват взаимно, стига да се подава подходящият параметър в декларацията Sub. Например:


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

Когато параметърът за обект събитие не се използва, може да бъде пропуснат:


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

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


tip

Използвайте конзолата на библиотеката ScriptForge, когато развойната среда на BASIC не е лесно достъпна, например по време на обработка на събития. Добавяйте необходимата информация в конзолата с метода DebugPrint. Записите в конзолата могат да се разтоварят в текстов файл или да се визуализират в диалогов прозорец. Като алтернатива можете да използвате модула Trace на библиотеката 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

Моля, подкрепете ни!