OpenOffice.org Basicでガントチャート
OpenOffice.org Basicを使ってガントチャート作成用マクロ ガントチャートforOOoを開発する手順を紹介していきます。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
addActionListener - 自作ダイアログのボタンに処理を登録する

前回配置したボタン「btnOK」をクリックするとダイアログを閉じるマクロを作ってみます。

ここで、必要になってくるのがActionListenerです。直訳すると「動作の聞き手」と言った感じでしょうか。何かのアクションを耳を澄まして待ち構えていて、アクションを聞きつけると動作を行うものという説明でわかるでしょうか。

VBAではこのようなものを利用しなくても、「btnOK_Click()」という関数が半自動的に生成されるのでこの中に処理を書けばいいのですが、OOoBasicでは多少面倒です。IDEのダイアログ編集画面で、プロパティからクリック時にマクロを割り当てる事も出来ますが、せっかくダイアログ用にモジュールを作るのだから、この辺りもコードで処理するようにしてみたいと思います。
まず、コードを下記に示します。

mdlSample

Private oDialog As Object
Private btnOK As Object
 
Private oActionListener As Object '---(1)
 
Sub Show
    
    Initialize
    
    btnOK.Label = "~OK"
    
    With oDialog
        .execute
        .dispose
    End With
    
End Sub
 
Sub Initialize
    
    oDialog =  createUnoDialog(DialogLibraries.Standard.dlgSample)
    
    oActionListener = CreateUnoListener("dlgSampleActionListener_", _
        "com.sun.star.awt.XActionListener") '---(2)
    
    btnOK = oDialog.getControl("btnOK")
    btnOK.addActionListener(oActionListener)
    
End Sub
 
Sub btnOK_Click '---(3)
    oDialog.endExecute
End Sub

Sub dlgSampleActionListener_actionPerformed '---(4)
    btnOK_Click
End Sub
 
Sub dlgSampleActionListener_disposing
 
End Sub

コードの説明をすると、

  1. アクションリスナー用の変数を用意します。
  2. 初期化処理にてアクションリスナーを生成し、btnOKにアクションリスナーを登録します。リスナーの生成方法にて、前側の引数はリスナーの名前で「○○_」というように"_"で終わる文字列を指定します。後側は生成するリスナーの種類ですが、アクションリスナー以外にもいくつか種類があり、これは後述したいと思います。
  3. VBAライクにbtnOK_Click関数を定義し、ダイアログを閉じる命令を書きます。そして、これをアクションリスナー用関数から呼び出すようにします。
  4. アクションリスナーの名前に合わせて関数を作ります。アクションリスナーには「actionPerformed」と「disposing」の2つがあるので、生成時に付けた名称と組み合わせて、「dlbSampleActionListener_actionPerformed」と「dlgSampleActionListener_disposing」の2つの関数を定義します。

ここで、Module1のMainを実行するとダイアログが表示され、ボタンをクリックするとダイアログが閉じます。

なぜアクションリスナー関数内で、ボタンをクリックした処理を直接書かないのかという疑問を感じるかもしれませんが、これは僕なりの工夫です。コントロールを多く配置したとき、同じ数だけのアクションリスナーを定義してもいいのですが、これは多少不便です。そこで、一つのアクションリスナーを全コントロールに登録し、アクションリスナー側でどのコントロールから呼ばれたかを判断して処理を分岐させるようにしています。こうすることで、VBAライクなコントロール用の関数を定義する事ができるので、アクションリスナーをラッパーみたいに使うのが良いと考えているためです。

これもまた賛否両論あると思いますが、色々試してみて自分がやりやすいスタイルを確立してみて下さい。

スポンサーサイト

テーマ:OpenOffice.org - ジャンル:コンピュータ

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://shinob.blog42.fc2.com/tb.php/35-281514fa
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
COPYRIGHT(C) 2004 POWERD BY FC2 ALLRIGHT RESERVED.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。