Top > OOoBasic > Dialog > TabControl

タブ Edit

OOo 3.4 から利用できます。LibreOffice 3.4 では以下で説明している方法で作成しても表示されません、../TabControl2 参照。

Edit

Sub tab_1
 DialogLibraries.loadLibrary("Standard")
 
 oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
 oDialogModel = oDialog.getModel()
 
 ' tab container
 oTabModel = oDialogModel.createInstance(_
   "com.sun.star.awt.tab.UnoControlTabPageContainerModel")
 
 oDialogModel.insertByName("tab", oTabModel)
 oTabModel.setPropertyValues(Array("Height", "PositionX", "PositionY", "Width"), _
     Array(130, 10, 10, 140))
 
 ' page 1
 oPage1 = oTabModel.createTabPage(1)
 oPage1.Title = "Page 1"
 oTabModel.insertByIndex(0, oPage1)
 'oPage1.ImageURL = "file:///home/hoge/Documents/images/icons/up.png"
 'oPage1.Tooltip = "page"
 'oPage1.Enabled = False
 
 oEdit = oPage1.createInstance("com.sun.star.awt.UnoControlEditModel")
 oEdit.setPropertyValues(Array("Height", "PositionX", "PositionY", "Width"), _
     Array(12, 5, 5, 100))
 oPage1.insertByName("edit", oEdit)
 oEdit.Text = "Page 1"
 
 ' page 2
 oPage2 = oTabModel.createTabPage(2)
 oPage2.Title = "Page 2"
 oTabModel.insertByIndex(1, oPage2)
 
 oButton = oPage2.createInstance("com.sun.star.awt.UnoControlButtonModel")
 oButton.setPropertyValues(Array("Height", "PositionX", "PositionY", "Width"), _
     Array(13, 5, 5, 35))
 oPage2.insertByName("button", oButton)
 oButton.Label = "Button"
 
 oDialog.getControl("tab").ActiveTabPageID = 1
 
 oDialog.execute()
 oDialog.dispose()
End Sub

ページ ID を 0 にするとそのページは選択できなくなります。1 以上の値を指定してください。

タブページコンテナ Edit

com.sun.star.awt.tab.UnoControlTabPageContainerModel サービスを利用します。 一般的なダイアログのコンポーネント追加方法の場合には、このコンポーネントをダイアログのモデルに追加すると自動的に作成される対応した com.sun.star.awt.tab.UnoControlTabPageContainer コンポーネントのインスタンスがダイアログビューから取得できます。上記では追加するタブコンテナコントロール名を tab としているので同名でダイアログコンテナから取得できます。

oTabContainer = oDialog.getControl("tab")

タブコンテナはダイアログのコンテナとしての機能と同じですが、コントロールとして保持しているのはタブページコンポーネントです。次のようにするとコントロールコンテナが保持しているページオブジェクトを取得できます。

oPages = oTabContaienr.getControls()
For i = 0 To UBound(oPages) step 1
  msgbox oPages(i).getModel().Name & " " & CStr(oPages(i).getModel().TabPageID)
Next

タブページコンテナをダイアログに追加する前にタブページを追加しないでください、クラッシュします。

タブページ Edit

タブページはダイアログのように子コントロールを保持しています。新しいタブページは次のようにして作成します。初期化時に配列で指定するのはページの ID です、1 以上の値を指定してください。

oPage1 = oTabModel.createTabPage(1)
oPage1.Title = "Page 1"

タブページはタブコンテナにインデックスを指定して挿入します。この時に指定するインデックスはページ ID ではありません。

oTabModel.insertByIndex(0, oPage1)

ページはインデックスのみで管理されており、名前でページを取得することはできません。必要であればタイトルで検索したりできますが、ローカライズなどの観点から見ていい方法ではありません。

タブページはタブコンテナで記載したようにコントロールオブジェクトを取得できます。 タブページに追加したコントロールにリスナーなどを追加したい場合にはコントロールオブジェクトが必要です。

タブページのプロパティ Edit

名前説明
ImageURLstring
Titlestring
Tooltipstring
Enabledboolean
TabPageIDshortページ ID。readonly

タブページ内部のサイズ Edit

タブコンテナオブジェクトのサイズはタブの部分や枠線の部分があるため、タブページ内部のサイズとは異なります。

ダイアログやウィンドウのサイズが変更されたときには、タブコンテナのサイズを変更したとしても表示されていないタブページのサイズは変更されていませんので注意が必要です。

ウィンドウ内に配置した場合には、タブページオブジェクトから getOutputSize メソッドでサイズを調べると内部のみのサイズが取得できます。 ウィンドウが非表示のときにサイズ変更したタブコンテナのサイズに合わせるにはウィンドウを表示状態にしてやる必要があります。

タブページリスナー Edit

タブの切り替えを検出するリスナーが利用できます。イベントオブジェクトから取得できるのはページID の TabPageID 要素です。

oTabListener = CreateUnoListener("XTabPageContainerListener_", _
   "com.sun.star.awt.tab.XTabPageContainerListener")
oTabContainer.addTabPageListener(oTabListener)

Function XTabPageContainerListener_tabPageActivated(ev)
  msgbox ev.TabPageID
End Function
Function XTabPageContainerListener_disposing(ev)
End Function

ウィンドウ上での利用 Edit

ダイアログでなくウィンドウ上で利用しようとして、タブコントロールを css.lang.XMultiComponentFactory から作成してもうまくいきません。 適当なダイアログを css.awt.ContainerWindowProvider から作成、そのウィンドウをウィンドウに埋め込んでやるとタブコントロールがウィンドウ上でも作成できます。


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