IBM Lotus Symphony
|
Cria uma ocorrência de Escuta.
Muitas interfaces Uno permitem o registo de escutas numa interface de escuta especial. Isto permite ouvir eventos específicos e definir o método de escuta apropriado. A função CreateUnoListener espera pela interface de escuta chamada e, então, transfere para a interface um objecto que esta suporta. Este objecto é, então, transferido para o método para registar a escuta.
oListener = CreateUnoListener( Prefixname, ListenerInterfaceName )
O seguinte exemplo baseia-se num objecto da biblioteca do Basic.
Dim oListener
oListener = CreateUnoListener( "ContListener_","com.sun.star.container.XContainerListener" )
O método CreateUnoListener requer dois parâmetros. O primeiro é um prefixo e é explicado em detalhe mais abaixo. O segundo parâmetro é o nome totalmente qualificado da interface da escuta que pretende utilizar.
A Escuta terá, então, de ser adicionada ao Broadcaster Object. Isto é feito através do método apropriado para adicionar uma escuta. Estes métodos seguem sempre o padrão "addFooListener", em que "Foo" corresponde ao tipo de interface da Escuta, sem o 'X'. Neste exemplo, o método addContainerListener é chamado para registar o XContainerListener:
Dim oLib
oLib = BasicLibraries.Library1 ' Library1 tem de existir!
oLib.addContainerListener( oListener ) ' Registar a Escuta
A Escuta está agora registada. Quando ocorre um evento, a Escuta correspondente chama o método apropriado a partir da interface com.sun.star.container.XContainerListener.
O prefixo chama Escutas registadas a partir de sub-rotinas do Basic. O sistema de tempo de execução do Basic procura sub-rotinas ou funções do Basic que tenham o nome "PrefixListenerMethode" e chama-as quando as encontra. Caso contrário, ocorre um erro de tempo de execução.
Neste exemplo, a interface de escuta faz uso dos seguintes métodos:
disposing:
Interface base de escuta (com.sun.star.lang.XEventListener): interface base para todas as Interfaces de escuta
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
Neste exemplo, o prefixo é ContListener_. Assim, as seguintes sub-rotinas terão de ser implementadas no Basic:
ContListener_disposing
ContListener_elementInserted
ContListener_elementRemoved
ContListener_elementReplaced
Existe um tipo de estrutura que contém informações acerca de um evento para cada tipo de Escuta. Quando é chamado um método de Escuta, é transferida uma instância-objecto deste evento para o método como um parâmetro. Os métodos de Escuta do Basic também podem invocar estes objectos de evento, desde que o parâmetro adequado seja transferido na declaração Sub. Por exemplo:
Sub ContListener_disposing( oEvent )
MsgBox "disposing"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementInserted( oEvent )
MsgBox "elementInserted"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementRemoved( oEvent )
MsgBox "elementRemoved"
MsgBox oEvent.Dbg_Properties
End Sub
Sub ContListener_elementReplaced( oEvent )
MsgBox "elementReplaced"
MsgBox oEvent.Dbg_Properties
End Sub
Não é necessário incluir o parâmetro de um objecto de evento, se o objecto não for utilizado:
' Implementação mínima da eliminação da Sub
Sub ContListener_disposing
End Sub
![]() |
Os métodos de escuta têm sempre de ser implementados para evitar erros de tempo de execução do Basic. |