Ajuda do LibreOffice 24.8
Cria uma instância Listener.
Muitos objetos Uno permitem registrar listeners com interfaces de listeners dedicadas. Isso permite ouvir eventos específicos e chamar o método listener apropriado. A função CreateUnoListener define uma interface listener associada a um objeto UNO. A interface do listener é então vinculada ao seu objeto associado.
    CreateUnoListener( Prefix As String, Typename As String) As Object
Prefixo: Um prefixo de texto usado em sub-rotinas BASIC que lidam com eventos.
Typename: Um nome de interface de ouvinte UNO totalmente qualificado.
O serviço UNO correspondente ao nome da interface do listener Typename, valor Null caso contrário.
O exemplo a seguir escuta os eventos que ocorrem para um objeto de biblioteca BASIC.
Dim oListener As Object
oListener = CreateUnoListener( "ContListener_","com.sun.star.container.XContainerListener" )
O método CreateUnoListener requer dois parâmetros. O primeiro é Prefix e é explicado com detalhes abaixo. O segundo parâmetro Typename é o nome totalmente qualificado da interface do listener.
Cada listener deve estar registrado no recurso de difusão do LibreOffice. Isso é feito ligando cada listener ao seu objeto associado. Os métodos de ligação sempre seguem o padrão 'adicionarFooListener', onde 'Foo' é o tipo de objeto da interface do ouvinte, sem o 'X'. Neste exemplo, o método addContainerListener é chamado para registrar o XContainerListener:
Dim oLib As Object
oLib = BasicLibraries.Library1 ' Library1 deve existir!
oLib.addContainerListener( oListener ) ' Registrar a Listener
O ouvinte agora está registrado. Quando ocorre um evento, o ouvinte ativo chama o método apropriado definido na interface com.sun.star.container.XContainerListener.
As sub-rotinas BASIC registradas e orientadas a eventos requerem o uso de um Prefixo definido. O sistema de tempo de execução do BASIC procura por sub-rotinas ou funções que tenham o nome 'Prefix+ListenerMethod' e as chama quando encontradas. Caso contrário, ocorrerá um erro de tempo de execução.
Neste exemplo, a interface com.sun.star.container.XContainerListener define os seguintes métodos :
| método | descrição | 
|---|---|
| disposing | com.sun.star.lang.XEventListener interface base para todas as interfaces ouvintes | 
| elementInserted | Método da interface com.sun.star.container.XContainerListener | 
| elementRemoved | Método da interface com.sun.star.container.XContainerListener | 
| elementReplaced | Método da interface com.sun.star.container.XContainerListener | 
'ContListener_' usado neste exemplo implica que as seguintes sub-rotinas devem ser implementadas em BASIC:
ContListener_disposing
ContListener_elementInserted
ContListener_elementRemoved
ContListener_elementReplaced
Cada interface ouvinte define um conjunto de nomes de eventos controlados associados a objetos Uno. Quando ocorre um evento, ele é enviado ao método como um parâmetro. Métodos de eventos BASIC também podem chamar uns aos outros, enquanto que o parâmetro apropriado seja passado na declaração Sub. Por exemplo:
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
Não é necessário incluir o parâmetro do objeto de evento quando não usado:
' Implementação mínima de Sub disposing
Sub ContListener_disposing
End Sub
Os métodos ouvintes devem sempre ser implementados para evitar erros de tempo de execução do BASIC.
Use o console da biblioteca ScriptForge quando a IDE do BASIC não estiver facilmente acessível, ou seja, durante o processamento de eventos. Use o método DebugPrint para adicionar qualquer informação relevante ao console. As entradas do console podem ser despejadas em um arquivo de texto ou visualizadas em uma janela de diálogo. Use o módulo Trace da biblioteca Access2Base como uma alternativa
   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