LibreOffice SymbolLibreOffice Symbol

Necessitamos da sua ajuda!

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 LibreOfficeDev. 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