Contents
Index 🔎︎

# CreateUnoListener Function

CreateUnoListener luo kuuntelijailmentymän.

Useat Uno-rajapinnat antavat rekisteröidä kuuntelijoita erityiseen kuuntelijarajapintaan (listener interface). Tämä tekee mahdolliseksi kuunnella määrättyjä tapahtumia ja kutsua sopivaa kuuntelijametodia. CreateUnoListener-funktio odottaa kutsuttua kuuntelijarajapintaa ja välittää sitten rajapintaan olion, jota rajapinta tukee. Tämä olion välitetään sitten metodille kuuntelijan rekisteröimiseksi.

## Syntaksi:

    oListener = CreateUnoListener( Prefixname, ListenerInterfaceName )

## Esimerkki:

Seuraavat esimerkit perustuvat Basicin kirjasto-olioihin.

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

CreateUnoListener-metodi vaatii kaksi parametriä. Ensimmäinen on etuliite ja se on selitetty yksityiskohtaisesti alempana. Toinen on käytettävän kuuntelijan täydellinen nimi.

Sitten pitää kuuntelija lisätä yleislähettäjäolioon. Tämä tehdään kutsumalla kuuntelijan lisäämiseen sopivaa metodia. Näiden metodien muoto on aina "addFooListener", missä täyte "Foo" on kuuntelijarajapinnan tyyppi, ilman kirjainta 'X'. Tässä esimerkissä addContainerListener-metodia on kutsuttu rekisteröimään XContainerListener:

    Dim oLib
    oLib = BasicLibraries.Library1 ' Library1 pitää olla olemassa!
    oLib.addContainerListener( oListener ) ' Rekisteröidään kuuntelija

Kuuntelija on nyt rekisteröity. Kun tapahtuma sattuu, vastaava kuuntelija kutsuu sopivaa metodia com.sun.star.container.XContainerListener-rajapinnasta.

Etuliite kutsuu rekisteröityjä kuuntelijoita Basic-aliohjelmista. Basicin ajonaikainen järjestelmä etsii Basic-aliohjelmia ja -funktioita, joilla on nimi "PrefixListenerMethode" ja löydettäessä kutsuu niitä. Muutoin tapahtuu ajonaikainen virhe.

Tässä esimerkissä kuuntelijarajapinta käyttää seuraavia metodeja:

- disposing:

- kuuntelijan kantarajapinta (com.sun.star.lang.XEventListener): kantarajapinta kaikille kuuntelijarajapinnoille

- elementInserted:

- com.sun.star.container.XContainerListener-rajapinnan metodi

- elementRemoved:

- com.sun.star.container.XContainerListener-rajapinnan metodi

- elementReplaced:

- com.sun.star.container.XContainerListener-rajapinnan metodi

Tässä esimerkissä etuliite on ContListener_. Seuraavat aliohjelmat pitää siksi olla toteutettu Basicissa:

- ContListener_disposing

- ContListener_elementInserted

- ContListener_elementRemoved

- ContListener_elementReplaced

Jokaiselle kuuntelijatyypille on olemassa tapahtuman rakennetyyppi, jossa on tapahtumaan liittyvää tietoa. Kun kuuntelijametodia on kutsuttu, tapahtuman ilmentymä välitetään metodille parametrinä. Basicin kuuntelijametodit voivat myös kutsua näitä olioita, mikäli sopiva parametri on välitetty Sub-rutiinin esittelyssä. Esimerkki:

    Sub ContListener_disposing( oEvent )
        MsgBox "disposing"
        MsgBox oEvent.Dbg_Properties
    End Sub

    Sub ContListener_elementInserted( oEvent )
        MsgBox "elementInserted"
        MsgBox oEvent.Dbg_Properties
    End Sub

    Sub ContListener_elementRemoved( oEvent )
        MsgBox "elementRemoved"
        MsgBox oEvent.Dbg_Properties
    End Sub

    Sub ContListener_elementReplaced( oEvent )
        MsgBox "elementReplaced"
        MsgBox oEvent.Dbg_Properties
    End Sub

Tapahtumaolion parametrejä ei tarvitse sisällyttää, jos oliota ei käytetä:

    ' Pieni Sub-rutiinilla toteutettu hävitys
    Sub ContListener_disposing
    End Sub

Kuuntelijametodit pitää aina olla toteutettuja (implemented), jolloin vältetään Basicin ajonaikaiset virheet.