Função CreateUnoListener

Cria uma instância de Ouvinte.

Muitos objetos Uno permitem registar ouvintes através de interfaces de ouvinte específicas. Isto permite monitorizar eventos específicos e invocar o método de ouvinte adequado. A função CreateUnoListener define uma interface de ouvinte associada a um objeto UNO. A interface de ouvinte é, em seguida, ligada ao objeto a que está associada.

Sintaxe:


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

Parâmetros:

Nome

Tipo

Descrição

Prefixo

String

Um prefixo de texto utilizado nas sub-rotinas BASIC que tratam de eventos.

Nome do modelo

String

Um nome de interface de ouvinte UNO totalmente qualificado.


Tipo de retorno:

Objeto. O serviço UNO correspondente ao nome da interface de ouvinte Typename; caso contrário, o valor Null.

Exemplo:

O exemplo seguinte monitoriza os eventos que ocorrem num objeto da 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 em pormenor abaixo. O segundo parâmetro, Typename, é o nome totalmente qualificado da interface do ouvinte.

Cada ouvinte deve estar registado na funcionalidade de transmissão LibreOffice. Isto é feito através da ligação de cada ouvinte ao seu objeto associado. Os métodos de ligação seguem sempre o padrão «addFooListener», em que «Foo» é o tipo de objeto da interface do ouvinte, sem o «X». Neste exemplo, o método addContainerListener é chamado para registar o XContainerListener:


Dim oLib As Object
oLib = BasicLibraries.Library1 ' Library1 deve existir!
oLib.addContainerListener( oListener ) ' Registar o ouvinte

O ouvinte já está registado. Quando ocorre um evento, o ouvinte ativo chama o método adequado definido na interface com.sun.star.container.XContainerListener.

As sub-rotinas BASIC registadas e orientadas por eventos exigem a utilização de um Prefixo definido. O sistema de tempo de execução do BASIC procura sub-rotinas ou funções com o nome «Prefixo+MétodoDoOuvinte» e chama-as quando as encontra. Caso contrário, ocorre 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

eliminação

com.sun.star.lang.XEventListener interface base para todas as interfaces de ouvinte

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


O uso de «ContListener_» neste exemplo implica que as seguintes sub-rotinas devem ser implementadas em BASIC:

Cada interface de ouvinte define um conjunto de nomes de eventos controlados associados a objetos Uno. Quando ocorre um evento, este é enviado para o método como parâmetro. Os métodos de eventos BASIC também podem chamar-se uns aos outros, desde que seja passado o parâmetro adequado 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 este não for utilizado:


' Implementação mínima da eliminação da Sub
Sub ContListener_disposing
End Sub
Ícone de aviso

Os métodos do ouvinte devem sempre ser implementados para evitar erros de tempo de execução no BASIC.


Ícone da dica

Utilize a biblioteca ScriptForge quando o IDE do BASIC não estiver facilmente acessível, ou seja, durante o processamento de eventos. Utilize o método DebugPrint para adicionar qualquer informação relevante à consola. As entradas da consola podem ser exportadas para um ficheiro de texto ou visualizadas numa janela de diálogo. Utilize o módulo Trace da biblioteca Access2Base como 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
Necessitamos da sua ajuda!

Necessitamos da sua ajuda!