CreateUnoListener-funksjonen

Lagar ein lyttarinstans

Mange Uno-objekt let deg registrera lyttarar med dedikerte lyttargrensesnitt. Dette gjer det mogleg å lytta etter bestemte hendingar og kalla opp rett lyttarmetode.Funksjonen CreateUnoListener gjev eit lyttargrensesnitt som er knytt til eit UNO-objekt. Lyttargrensesnittet er då bunde til det tilknytte objektet.

Syntaks:


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

Parametrar:

Prefix: Eit tekstprefiks som vert brukt i BASIC sub-rutiner som handsamar hendingar.

Typename: Eit fullt kvalifisert namn på UNO-lyttargrensesnitt.

Returverdi:

UNO-tenesta som svarar til lyttargrensesnittnamnet Typename, elles verdien Null.

Eksempel:

Eksempelet nedanfor lyttar til hendingar som skjer for eit BASIC bibliotekobjekt.


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

Metoden CreateUnoListener krev to parameter. Den første er Prefiks og er forklart i detaljar nedanfor. Den andre parameteren er Typename som er det fullt kvalifiserte namnet på lyttar-grensesnittet.

Kvar lyttar må vera registrert i funksjonen LibreOffice broadcaster. Dette vert gjort ved å binda kvar lyttar til det tilknytte objektet. Bind-metodar følgjer alltid mønsteret 'addFooListener', der 'Foo' er objekttypen til lyttargrensesnittet, utan 'X'. I dette eksempelet vert metoden addContainerListener kalla opp for å registrera XContainerListener:


Dim oLib As Object
oLib = BasicLibraries.Library1 ' Library1 må finnast.
oLib.addContainerListener( oListener ) ' Register lyttaren

Lyttaren er nå registrert. Når det skjer ei hending, vil den tilsvarande lyttaren kalla opp den passande metoden definert i grensesnittet com.sun.star.container.XContainerListener.

Hendingsdrivne registrerte BASIC-subrutinar krev bruk av eit definert Prefiks. BASIC køyretidssystemsystem søjker etter subrutiner eller funksjonar som har namnet 'Prefix + ListenerMethod' og kallar dei opp når dei vert funne. Elles oppstår det ein køyretidsfeil.

I dette eksempelet vil grensesnittet com.sun.star.container.XContainerListener definera desse metodane:

metode

beskriving

disposing

com.sun.star.lang.XEventListener base grensesnitt for alle Listener-grensesnitt

elementInserted

Metode for com.sun.star.container.XContainerListener grensesnittet

elementRemoved

Metode for com.sun.star.container.XContainerListener grensesnittet

elementReplaced

Metode for com.sun.star.container.XContainerListener grensesnittet


'ContListener_' som vert brukt i dette eksempelet inneber at følgjande subrutinar må implementerast i BASIC:

Kvart lyttargrensesnitt definerer eit sett med kontrollerte hendingsnamn knytte til Uno-objekt. Når ei hending oppstår, vert ho sendt til metoden som ein parameter. BASIC-hendingsmetodar kan også kalla opp kvarandre, så lenge den aktuelle parameteren er sendt gjennom deklarasjonen Sub. For eksempel:


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

Du treng ikkje å ta med hendingsobjektparameteren når han ikkje vert brukt:


' Minimal implementering av Sub-disposing
Sub ContListener_disposing
End Sub
warning

Lyttarmetodar må alltid implementerast for å unngå BASIC køyretidsfeil.


tip

Bruk bibliotekkonsollen ScriptForge når BASIC IDE ikkje er lett tilgjengeleg, det vil seia ved handsaming av hendingar. Bruk metoden DebugPrint for å leggja relevant informasjon til i konsollen. Oppføringar i konsollen kan setjast inn i ei tekstfil eller gjerast synlege i eit dialogvindauge. Bruk modulen Trace i biblioteket Access2Base som eit alternativ.



   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

Støtt oss!