目次
索引 🔎︎

# CreateUnoListener Function

リスナーインスタンスを作成します。

Uno インタフェースの多くでは、リスナーを特殊なリスナーインタフェースに登録することができます。これにより、特定のイベントの発生を監視して、必要なリスナーメソッドを呼び出すことができます。CreateUnoListener 関数は、呼び出されたリスナーインタフェースの到着を待ち、そのインタフェースのサポートするオブジェクトへ、インタフェースを引き渡します。次にこのオブジェクトはメソッドへ引き渡されてリスナーが登録されます。

### Syntax:

oListener = CreateUnoListener( Prefixname, ListenerInterfaceName )

### Example:

下記の例は、Basicライブラリオブジェクトをベースにしています。

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

CreateUnoListener メソッドは、2 つのパラメーターを使用します。1 番目のパラメーターはプレフィックスで、詳細は後述します。2 番目のパラメーターは、使用する Listener インタフェースの完全な名前です。

Listener は Broadcaster Object に追加する必要があります。この処理は、Listener 追加用のメソッドを呼び出すことで実行します。通常こうしたメソッドの取るパターンは「addFooListener」という形式で、ここで「Foo」が Listener Interface Type で「X」は付きません。ここでの例では、addContainerListener メソッドを呼び出して XContainerListener を登録しています。

    Dim oLib
    oLib = BasicLibraries.Library1 ' Library1 の存在が必要
    oLib.addContainerListener( oListener ) ' リスナーの登録

これで Listener が登録されます。イベントが発生すると、該当する Listener が com.sun.star.container.XContainerListener Interface から呼び出されます。

プレフィックスは、登録したListenerをBasicサブルーチンから呼び出します。Basicの実行時システムは、「PrefixListenerMethod」という名前のBasicサブルーチンや関数を検索して、該当するものを発見した段階でこれらを呼び出します。該当するものが存在しないと、実行時エラーが発生します。

ここでの例では、Listener-Interface は下記のメソッドを利用しています。

- disposing:

- リスナーのベースインタフェース (com.sun.star.lang.XEventListener):すべての Listener Interface のベースインタフェース

- elementInserted:

- com.sun.star.container.XContainerListener インタフェースのメソッド

- elementRemoved:

- com.sun.star.container.XContainerListener インタフェースのメソッド

- elementReplaced:

- com.sun.star.container.XContainerListener インタフェースのメソッド

ここでの例では、プレフィックスをContListener_としています。このため下記のサブルーチン群をBasicに実装しておく必要があります。

- ContListener_disposing

- ContListener_elementInserted

- ContListener_elementRemoved

- ContListener_elementReplaced

Listenerの種類ごとに、イベント情報を格納するイベント構造型が存在します。Listenerメソッドが呼び出されると、このイベントのインスタンスがメソッドにパラメーターとして渡されます。BasicのListenerメソッドは、該当するパラメーターがSub宣言部で渡される限り、これらのイベントオブジェクトを呼び出すこともできます。たとえば、

    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

使用しないオブジェクトについては、イベントオブジェクトのパラメーターを省略できます。

    '  disposing 用 Sub の最小構成
    Sub ContListener_disposing
    End Sub

Basicの実行時エラーを回避するため、Listenerメソッドは常に実装しておく必要があります。