Top > OOoBasic > Calc > rangeselection

セル範囲選択ダイアログ Edit

セル範囲を選択させるダイアログの使い方を説明します。

セル範囲を選択させるダイアログでは,ユーザー フレンドリーなセル範囲の選択を可能にします。しかし,OOoBasic からこれを使用するには少し面倒で,リスナーを使用する必要があります。そこで,ここでは詳しくセル範囲選択ダイアログの表示方法と使い方について説明していきます。

セル範囲選択開始 Edit

まずは,セル範囲選択をさせるダイアログを表示する方法からです。このセル範囲選択ダイアログは,ファイルやディレクトリのためのダイアログのようにダイアログサービスの中に複合的に作成されたダイアログとは違います。ダイアログの表示は Calc の CurrentController から startRangeSelection メソッドを使用して行います。

この startRangeSelection メソッドを呼び出すことでセル範囲選択ダイアログがすぐに表示されます。このメソッドには引数が一つ必要ですが例を見てから説明します。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
Global oRangeSelectionListener As Object
 
Sub Main
Dim oDoc As Object, oController As Object
Dim aArg(2) As New com.sun.star.beans.PropertyValue
 
   oDoc = ThisComponent
   oController = oDoc.getCurrentController()
   
   aArg(0).Name = "InitialValue"
   aArg(0).Value = ""
   aArg(1).Name = "Title"
   aArg(1).Value = "title"
   aArg(2).Name = "CloseOnMouseRelease"
   aArg(2).Value = false
   oRangeSelectionListener = CreateUnoListener("RangeSelectionListener_", _
        "com.sun.star.sheet.XRangeSelectionListener")
   oController.addRangeSelectionListener(oRangeSelectionListener)
   oController.startRangeSelection(aArg())
End Sub
 
Sub RangeSelectionListenter_disposing()
 
End Sub
 
Sub RangeSelectionListener_done(oEvent)
   MsgBox oEvent.RangeDescriptor
   ThisComponent.CurrentController.removeRangeSelectionListener(_
       oRangeSelectionListener)
End Sub
 
Sub RangeSelectionListener_aborted(oEvent)
End Sub

このコードを実行すると範囲を選択するダイアログが表示されます。そして範囲を選択して,範囲を選択するダイアログを閉じると MsgBox に範囲が文字列で表示されます。

それぞれの部分を次から分けてみていきます。

範囲選択の開始 Edit

コード中ではまず,CurrentController オブジェクトを取得しています。セル範囲を選択するダイアログを表示するにはこのオブジェクトから startRangeSelection メソッドを使って行います。

そして,次に startRangeSelection メソッドのための引数を com.sun.star.beans.PropertiValue として用意します。ここで変数 aArg() を要素数 3 の配列として定義します。引数としての要素は次のものです。

要素
InitialValue最初の範囲を文字列で
Titleダイアログのタイトルを文字列で
CloseOnMouseReleaseマウスボタンを放したときにダイアログを閉じるかどうか

作成した配列を引数として startRangeSelection メソッドを呼び出すことで引数に対応した範囲選択ダイアログが表示されます。が,このメソッドを呼び出す前に範囲選択用のリスナーを用意しておきます。このためには XRangeSelectionLitener を使用します。

リスナー XRangeSelectionListener の設定 Edit

範囲選択ダイアログを表示,使用するためにはそれ専用のリスナーが必要です。このリスナーなしではただただ範囲を選択させるだけで,OOoBasic としてはまったく範囲の選択結果を取得することができません。

リスナーのための変数として,コードの冒頭で次のように定義しています。

Global oRangeSelectionListener As Object

この変数は Global 変数として定義しておいてください。

リスナーの作成は次のとおりです。

 oRangeSelectionListener = CreateUnoListener("RangeSelectionListener_", _
      "com.sun.star.sheet.XRangeSelectionListener")

ここではリスナーのための接頭語は "RangeSelectionListener_" としています。そして,このリスナーのためのメソッド disposingdoneaborted は次のように定義しています。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 Sub RangeSelectionListenter_disposing()
 
 End Sub
 
 Sub RangeSelectionListener_done(oEvent)
   MsgBox oEvent.RangeDescriptor
   ThisComponent.CurrentController.removeRangeSelectionListener(_
       oRangeSelectionListener)
 End Sub
 
 Sub RangeSelectionListener_aborted(oEvent)
   ThisComponent.CurrentController.removeRangeSelectionListener(_
       oRangeSelectionListener)
 End Sub

ここで,RangeSelectionListenter_disposing はリスナーが処理されるときに呼び出されるメソッドです。そして,範囲の選択ダイアログが正常に終了されたときに呼び出されるメソッド RangeSelectionListener_done および,範囲の選択ダイアログが中止されたときに呼び出されるメソッド RangeSelectionListener_aborted です。

そして,このリスナーは CurrentController のメソッド addRangeSelectionListener メソッドを使用して設定します。

 oController.addRangeSelectionListener(oRangeSelectionListener)

ここで作成,追加されたコントローラは明示的に removeRangeSelectionListener メソッドで削除するか,OpenOffice.org のファイルが閉じられるまで持続します。そこで,範囲の選択ダイアログが終了された時点でリスナーを削除しておきます。RangeSelectionListener_done および RangeSelectionListener_aborted の中で次のようにしてリスナーを削除しています。

  ThisComponent.CurrentController.removeRangeSelectionListener(_
      oRangeSelectionListener)

リスナーを削除するためにこの oRangeSelectionListener 変数は Global 変数として定義しておく必要があります。

範囲選択中止 Edit

範囲の選択の中止はどうにかして abortRangeSelection メソッドを呼び出すことで行います。

ThisComponent.CurrentController.abortRangeSelection()

を実行することで行います。

リスナー Edit

範囲選択のためのリスナーは二つあります。一つは,上記の XRangeSelectionListener で範囲選択が終了または中止されたときのためのリスナーです。もう一つのリスナーは範囲選択が変更されたときのためのリスナーで,XRangeSelectionChangeListener を使用します。

XRangeSelectionChangeListener Edit

XRangeSelectionChangeListener は範囲選択が変更されたときに呼び出されるメソッド descriptorChanged を持っています。

次のようにしてこのリスナーを使用します。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
Global oRangeSelectionListener As Object
Global oRangeSelectionChangeListener As Object '<--
 
Sub Main
Dim oDoc As Object, oController As Object
Dim aArg(2) As New com.sun.star.beans.PropertyValue
 
   oDoc = ThisComponent
   oController = oDoc.getCurrentController()
   
   aArg(0).Name = "InitialValue"
   aArg(0).Value = ""
   aArg(1).Name = "Title"
   aArg(1).Value = "area"
   aArg(2).Name = "CloseOnMouseRelease"
   aArg(2).Value = false
   oRangeSelectionListener = CreateUnoListener("RangeSelectionListener_",_
     "com.sun.star.sheet.XRangeSelectionListener")
   oRangeSelectionChangeListener = CreateUnoListener("RangeSelectionChangeListener_",_
     "com.sun.star.sheet.XRangeSelectionChangeListener") '<--
   oController.addRangeSelectionListener(oRangeSelectionListener)
   oController.addRangeSelectionChangeListener(oRangeSelectionChangeListener) '<--
   oController.startRangeSelection(aArg())
End Sub
 
Sub RangeSelectionListenter_disposing()
 
End Sub
 
Sub RangeSelectionListener_done(oEvent)
MsgBox oEvent.RangeDescriptor
ThisComponent.CurrentController.removeRangeSelectionListener(_
     oRangeSelectionListener)
End Sub
 
Sub RangeSelectionListener_aborted(oEvent)
ThisComponent.CurrentController.removeRangeSelectionListener(_
     oRangeSelectionListener)
End Sub
 
Sub RangeSelectionChangeListener_disposing() '<--
End Sub
 
Sub RangeSelectionChangeListener_descriptorChanged(oEvent) '<--
Dim sRange As String
sRange = oEvent.RangeDescriptor
ThisComponent.CurrentController.removeRangeSelectionChangeListener(_
     oRangeSelectionChangeListener)
End Sub

追加されたのは 5 箇所です。リスナーのための oRangeSelectionChangeListener は Global 変数として定義します。そして,このリスナーを CreateUnoListener でインスタンス化します。リスナーの設定は CurrentController の addRangeSelectionChangeListener メソッドで行います。

範囲選択が変更されたときに呼び出される部分は,"RangeSelectionChangeListener_" を接頭語として定義しました。また,リスナー専用の disposing も作成しておきます。

このリスナーの使用で範囲選択の変更を取得しようとすると,選択範囲を広げようとするたびに (マウスでカーソルをドラッグして) このリスナーが呼ばれます。そのことに気をつけてコードを書く必要があります。

}}


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes