Função CreateUnoListener

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.

Sintaxe:


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

Parâmetros:

Prefixo: Um prefixo de texto usado em sub-rotinas BASIC que lidam com eventos.

Typename: Um nome de interface de ouvinte UNO totalmente qualificado.

Valor de retorno:

O serviço UNO correspondente ao nome da interface do listener Typename, valor Null caso contrário.

Exemplo:

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:

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
warning

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


tip

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

♥ Doe para nosso projeto! ♥