LibreOffice 25.8 Hjælp
Opretter en Listener (lytte)-instans.
Mange Uno-objekter lader dig registrere lyttere (listeners) med dedikerede listener-grænseflader. Dette tillader lytning efter specifikke hændelser og kald af den relevante listener-metode. Funktionen CreateUnoListener angiver en listener-grænseflade tilknyttet et Uno-objekt. Listener-grænsefladen er så bundet til det tilknyttede objekt.
    CreateUnoListener( Prefix As String, Typename As String) As Object
| Navn | Type | Beskrivelse | 
|---|---|---|
| Prefix | String | Et tekstpræfiks brugt i BASIC-subrutiner, som håndterer hændelser. | 
| Typename | String | Et fuldt kvalificeret UNO-listener grænsefladenavn. | 
Object. Den UNO-tjeneste, som svarer til Typename-listener-grænsefladenavnet, ellers Null-værdi.
Det følgende eksempel lytter til hændelser, som forekommer for et BASIC-biblioteksobjekt.
Dim oListener As Object
oListener = CreateUnoListener( "ContListener_","com.sun.star.container.XContainerListener" )
Metoden CreateUnoListener kræver to parametre. Den første er Prefix og er beskrevet i detaljer nedenfor. Den anden parameter Typename er det fuldt kvalificerede navn på listener-grænsefladen.
Enhver lytter (listener) skal være registret hos LibreOffice broadcaster-funktionen. Dette gøres ved at binde hver lytter til sit tilknyttede objekt. Bindingsmetoder følger altid mønsteret 'addFooListener', hvor 'Foo' er objekttypen for listener-grænsefladen, uden 'X'. I dette eksempel bliver metoden addContainerListener kaldet for at registrere XContainerListener:
Dim oLib As Object
oLib = BasicLibraries.Library1 ' Library1 skal eksistere!
oLib.addContainerListener( oListener ) ' Registrerer lytteren
Lytteren er nu registreret. Når der sker en hændelse, kalder den aktive lytter den relevante metode defineret i com.sun.star.container.XContainerListener-grænsefladen.
Hændelses-drevne registrerede BASIC-subrutiner kræver brug af et defineret Prefix. BASIC-afviklingssystemet søger efter subrutiner eller funktioner, som har navnet 'Prefix+ListenerMethod' og kalder dem, når de bliver fundet. Eller sker der en kørselsfejl.
I dette eksempel definerer com.sun.star.container.XContainerListener-grænsefladen de følgende metoder:
| metode | beskrivelse | 
|---|---|
| disposing | com.sun.star.lang.XEventListener basisgrænseflade for alle Listener-grænseflader. | 
| elementInserted | Metode for com.sun.star.container.XContainerListener-grænsefladen. | 
| elementRemoved | Metode for com.sun.star.container.XContainerListener-grænsefladen. | 
| elementReplaced | Metode for com.sun.star.container.XContainerListener-grænsefladen. | 
'ContListener_' brugt i dette eksempel indebærer, at de følgende subrutine skal være implementeret i BASIC:
ContListener_disposing
ContListener_elementInserted
ContListener_elementRemoved
ContListener_elementReplaced
Enhver lytter-grænseflade (listener) definerer et sæt kontrollerede hændelsesnavne tilknyttet Uno-objekter. Når en hændelse sker, bliver den sendt til metoden som parameter. BASIC-hændelsesmetoder kan også kalde hinanden, så længe den relevante parameter bliver overført i Sub-erklæringen. 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
Der er ikke behov for at inkludere hændelsesobjekt-parameteren, når den ikke bruges:
' Minimal implementering af sub disposing
Sub ContListener_disposing
End Sub
Lytter-metoder skal altid implementeres for at undgå BASIC-kørselsfejl.
Brug bibliotekskonsollen ScriptForge, når Basic IDE ikke er let tilgængeligt, dvs. under hændelseshåndtering. Brug DebugPrint-metoden til at tilføje relevant information til konsollen. Konsol-poster kan sendes til en tekstfil eller vises i et dialogvindue. Som et alternativ kan du bruge modulet Trace i biblioteket 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