CreateUnoListener-funktion

Opretter en lytte-forekomst.

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.

Syntaks:


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

Parametre:

Prefix: Et tekst-præfiks, som bruges i BASIC-subrutiner, der håndterer hændelser.

Typename:Et fuldt kvalificeret Uno-listener (lytter) grænseflade-navn.

Returværdi:

Uno-tjenesten som svarer til Typename-listener-grænsefladenavnet, alternativt værdien Null.

Eksempel:

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:

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
warning

Lytter-metoder skal altid implementeres for at undgå BASIC-kørselsfejl.


tip

Use ScriptForge library console when the BASIC IDE is not easily accessible, that is during events processing. Use the DebugPrint method to add any relevant information to the console. Console entries can be dumped to a text file or visualized in a dialog window. Use Trace module of Access2Base library as an alternative



   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øt os venligst!