Sumário

# 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:

Nome | Tipo | Descrição
--- | --- | ---
Prefixo | String | Um prefixo de texto usado nas subrotinas BASIC que manipulam eventos.
Typename | String | Um nome de interface de escuta UNO completamente qualificado.

### Tipo de retorno:

Objeto. O serviço UNO correspondente ao nome da interface de escuta Typename, senão o valor Null.

### 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:

- 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

Tópicos relacionados

Criar listeners de evento

Mapeamento de eventos para objetos

Veja também Eventos de documento, Eventos de formulário.

Criar um manipulador de caixa de diálogo

Acompanhar eventos de documento

Objetos UNO, funções e serviços

♥ Doe para nosso projeto! ♥