LibreOffice 25.2 Hjelp
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.
    CreateUnoListener( Prefix As String, Typename As String) As Object
Prefix: Eit tekstprefiks som vert brukt i BASIC sub-rutiner som handsamar hendingar.
Typename: Eit fullt kvalifisert namn på UNO-lyttargrensesnitt.
UNO-tenesta som svarar til lyttargrensesnittnamnet Typename, elles verdien Null.
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:
ContListener_disposing
ContListener_elementInserted
ContListener_elementRemoved
ContListener_elementReplaced
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
Lyttarmetodar må alltid implementerast for å unngå BASIC køyretidsfeil.
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