OOobbs/37
質問
次のような一連のプログラムによって、ファイルを閉じるとき、印刷するときなどをとらえて、ある命令を実行させたいと思っています。しかし、RegisterListener()をrunさせた後、セーブしたり、印刷させたりしてもうんともすんとも言ってくれません。どこがいけないのでしょうか。教えて頂ければうれしいです。 Global oListener as object Sub RegisterListener() oListener = CreateUnoListener("DL_", "com.sun.star.document.XEventListener") ThisComponent.addEventListener(oListener) End Sub Sub UnRegisterListener() ThisComponent.removeEventListener(oListener) End Sub Sub DL_notifyEvent(oEvent) Select Case oEvent.EventName Case "OnUnLoad" msgbox "OnUnLoad" Case "OnPrint" msgbox "OnPrint" Case "OnSaveDone" msgbox "OnSaveDone" End Select End Sub Sub DL_disposing(oEvent) 'Do Nothing End Sub 回答
うまくいったコードを示します。問題点は addEventListener メソッドの部分でした。普通に使用していると分からないような事情です。 Global oListener as object Sub RegisterListener() oListener = CreateUnoListener("DL_", "com.sun.star.document.XEventListener") ThisComponent.com_sun_star_document_XEventBroadcaster_addEventListener(oListener) End Sub Sub UnRegisterListener() ThisComponent.com_sun_star_document_XEventBroadcaster_removeEventListener(oListener) End Sub Sub Dl_notifyEvent(oEvent)'oListen As Object) Select Case oEvent.EventName Case "OnUnLoad" msgbox "OnUnLoad" Case "OnPrint" msgbox "OnPrint" Case "OnSaveDone" msgbox "OnSaveDone" End Select End Sub Sub Dl_disposing(oEvent) 'Do Nothing End Sub Developer's Guide の 6.2.6 Document Events の部分をみるとドキュメントイベントについての記述があります。 addEventListener と removeEventListener メソッドは他にもあり,それはドキュメントで問題を引き起こしているようです。普通に ThisComponent.addEventListener(...) として呼び出すと com.sun.star.lang.XComponent のメソッドが呼ばれるようです。そこで,確実に com.sun.star.document.XEventBroadcaster の方のメソッドを呼び出すために上記のような記述を行います。 あとで別ページを作成しようと思います。
|