Funkce CreateUnoListener

Vytvoří instanci Listener.

Mnoho objektů UNO umožňuje pomocí speciálního rozhraní registrovat posluchače. Tak můžete naslouchat určitým událostem a volat při nich odpovídající naslouchací metodu. Funkce CreateUnoListener nastaví rozhraní posluchače přiřazené k objektu UNO. Toto rozhraní je poté na svůj přiřazený objekt navázáno.

Syntaxe:


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

Parametry:

Prefix: Textová předpona použitá v podprogramech jazyka BASIC, která zpracovávají události.

Typename: Plně kvalifikovaný název rozhraní posluchače UNO.

Návratová hodnota:

Služba UNO odpovídající názvu rozhraní posluchače Typename, případně hodnota Null.

Příklad:

V následujícím příkladu se naslouchá událostem, které nastavení pro objekt knihovny jazyka BASIC.


Dim oListener As Object
oListener = CreateUnoListener( "ContListener_","com.sun.star.container.XContainerListener" )

Metoda CreateUnoListener vyžaduje dva parametry. První je Prefix a podrobněji je vysvětlen níže. Druhý parametr Typename je plně kvalifikovaný název rozhraní posluchače.

Každý posluchač je nutné zaregistrovat pro funkcionalitu LibreOffice zvanou broadcaster. To se provádí navázáním posluchače na jemu přiřazený objekt. Metody pro navázání mají vždy název tvaru „addFooListener“, kde „Foo“ je typ objektu pro rozhraní posluchače bez počátečního „X“. V tomto příkladu zavoláním metody addContainerListener zaregistruje XContainerListener:


Dim oLib As Object
oLib = BasicLibraries.Library1 ' Library1 musí existovat!
oLib.addContainerListener( oListener ) ' Registerovat listener

Nyní je posluchač zaregistrován. Když nastane událost, zavolá aktivní posluchač příslušnou metodu definovanou v rozhraní com.sun.star.container.XContainerListener.

Událostmi spouštěné zaregistrované podprogramy jazyka BASIC vyžadují parametr Prefix. BASIC za běhu vyhledá procedury nebo funkce s názvem „Prefix+ListenerMethod“ a při nalezení je zavolá. Jinak dojde k běhové chybě.

V tomto příkladu definuje rozhraní com.sun.star.container.XContainerListener následující metody:

Metoda

Popis

disposing

com.sun.star.lang.XEventListener základní rozhraní pro všechna rozhraní Listener

elementInserted

metoda rozhraní com.sun.star.container.XContainerListener

elementRemoved

metoda rozhraní com.sun.star.container.XContainerListener

elementReplaced

metoda rozhraní com.sun.star.container.XContainerListener


V příkladu je použita předpona „ContListener_“, proto musí být v BASICu implementovány následující podprogramy:

Každé rozhraní posluchače definuje sadu názvů událostí přiřazených k objektům UNO. Jakmile nastane událost, je metodě poslána jako parametr. Metody pro události BASICu se také mohou volat vzájemně, pokud je příslušný parametr předán v deklaraci Sub. Například:


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

Parametr s objektem událostí není potřeba přidávat, pokud jej nepoužíváte:


' Minimální implementace Sub disposing
Sub ContListener_disposing
End Sub
warning

Metody posluchače je nutné vždy implementovat, abyste předešli běhovým chybám BASICu.


tip

Při zpracování událostí, kdy není snadno dostupné BASIC IDE, můžete použít konzoli knihovny ScriptForge. Metodou DebugPrint přidáte do konzole libovolnou relevantní informaci. Položky konzole můžete vypsat do textového souboru nebo zobrazit v dialogovém okně. Alternativně můžete použít modul Trace knihovny Access2Base.



   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

Podpořte nás!