CreateUnoListener-funktion

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.

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

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

Støt os venligst!