Top > OOoBasic > Generic > menu

メニュー Edit

メニューを操作する方法です。OpenOffice.org 2.0 系が対象です。1.0 系では OOo API からメニューの操作ができません。

コンフィグマネジャーサプライヤー Edit

ツールバーの変更のためのサービスにアクセスします。

Dim oModCfgMgrSup As Object
  oModCfgMgrSup = createUnoService( _ 
  "com.sun.star.ui.ModuleUIConfigurationManagerSupplier")

このサービスを利用して、アクセスしたいツールバーのコンフィグマネジャーにアクセスします。

コンフィグマネジャー Edit

コンフィグマネジャーサプライヤーにアクセスするツールバーの種類を指定して、コンフィグマネジャーを作成します。

Dim oModCfgMgr As Object
 oModCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager(_
   "com.sun.star.sheet.SpreadsheetDocument" )

ここで指定するツールバーの種類は、ドキュメントの種類と同じです。

メニュー設定 Edit

メニュー設定はツールバーと違って一つだけで、"private:resource/menubar/menubar" です。

Dim sToolbar As String
Dim oMenuSettings As Object

  sMenubar = "private:resource/menubar/menubar"
  oMenuSettings = oModuleCfgMgr.getSettings(sMenubar ,true)

getSettings メソッドでメニューの設定にアクセスします。一つ目の引数にメニュー名を、二つ目の引数に変更可能にするかどうかを指定します。

メニューの構成 Edit

メニューの構成を説明します。メニューは選択するとコマンドが実行される項目以外にサブメニューやトップメニューといった、コマンドが実行されないメニューもあります。

選択するとコマンドが実行される普通のメニューは次のような PropertyValue で構成されます。

' Normal Menu
Function CreateMenuItem( _
    sCommand As String, sLabel As String ) as Variant
Dim aMenuMember(3) As New com.sun.star.beans.PropertyValue

  aMenuMember(0).Name = "CommandURL"
  aMenuMember(0).Value = sCommand
  aMenuMember(1).Name = "HelpURL"
  aMenuMember(1).Value = "" 'sHelpURL
  aMenuMember(2).Name = "Label"
  aMenuMember(2).Value = sLabel
  aMenuMember(3).Name = "Type"
  aMenuMember(3).Value = 0
  
  CreateMenuItem = aMenuMember()
End Function

それぞれの項目を確認する前に、トップメニューおよびサブメニューは次のような構成です。

' Top menu or sub menu
Function CreateMenuMember( _
    sCommand As String, sLabel As String, aItemDescs ) as Variant
Dim aMenuMember(4) As New com.sun.star.beans.PropertyValue

  aMenuMember(0).Name = "CommandURL"
  aMenuMember(0).Value = sCommand
  aMenuMember(1).Name = "HelpURL"
  aMenuMember(1).Value = "" 'sHelpURL
  aMenuMember(2).Name = "ItemDescriptorContainer"
  aMenuMember(2).Value = aItemDescs
  aMenuMember(3).Name = "Label"
  aMenuMember(3).Value = sLabel
  aMenuMember(4).Name = "Type"
  aMenuMember(4).Value = 0
  
  CreateMenuMember = aMenuMember()
End Function
  • CommandURL: メニューのコマンド
  • HelpURL: ヘルプのURL
  • Label: メニューの項目の表示ラベル
  • Type: メニュー項目のタイプ。普通のメニューか区切り線のどちらか。

普通のメニューとサブメニューの違いは、ItemDescriptorContainer があるかどうかです。このプロパティは、インデックスで管理されたサブメニューを含みます。そのため、トップメニューもしくはサブメニューでこのプロパティがあります。

トップメニュー項目 Edit

トップメニューの項目は「ファイル」、「編集」、「表示」、「ツール」といったものがすでにあります。メニューに追加したい項目にアクセスする必要があります。

特定のメニュー項目にアクセスしたい場合でも、名前でアクセスできないため次のように一つづつ調べます。

Dim sMenuName As String
  sMenuName = ".uno:HelpMenu"

For i = 0 To oMenuSettings.getCount() -1
  If GetProperty("CommandURL", oMenuSettings.getByIndex(i)) = sMenuName Then
      oTopMenu = oMenuSettings.getByIndex(i)
  End If
Next i
Function GetProperty( sName As String, aValues )
For i = 0 To UBound(aValues())
  If aValues(i).Name = sName Then
    GetProperty = aValues(i).Value
  End If
Next i
End Function

トップメニューの項目は次の CommandURL を持ちます。

メニューCommandURL
ファイル.uno:PickList
編集.uno:EditMenu
表示.uno:ViewMenu
挿入.uno:InsertMenu
書式.uno:FormatMenu
.uno:TableMenu
ツール.uno:ToolsMenu
データ.uno:DataMenu
スライドショー.uno:SlideShowMenu
変更.uno:ModifyMenu
ウィンドウ.uno:WindowList
ヘルプ.uno:HelpMenu

新規トップメニュー Edit

新しいトップメニューを作成するには次のようにします。

oMenu = oMenuSetting.createInstanceWithContext( GetDefaultContext() )
oTopMenu = CreateMenuMember( sMenuName, sMenuUIName, oMenu )
oMenuSetting.insertByIndex( oMenuSetting.getCount(), oTopMenu )

サブメニュー Edit

サブメニューを作成します。新規トップメニューと同じです。

oMenuSub = oMenuSetting.createInstanceWithContext( GetDefaultContext() )
aSubMenu = CreateMenuMember( "submenu", sSubMenuName, oMenuSub )
oSubMenu = GetProperty( "ItemDescriptorContainer", aSubMenu )

このサブメニューにメニューを追加します。

oSubMenu.insertByIndex( oSubMenu.getCount(), CreateMenuItem( sMacro, sLabel ) )

メニューを追加した後で、次のようにしてトップメニューに追加します。下の場合にはメニューの最後に追加します。

oTopMenu.insertByIndex( oTopMenu.getCount(), aSubMenu )

区切り Edit

メニューの区切りはメニューと同じように追加します。

oSubMenu.insertByIndex( oSubMenu.getCount(), CreateSeparator() )

Function CreateSeparator()
Dim aMenuMember(1) As New com.sun.star.beans.PropertyValue

  aMenuMember(0).Name = "CommandURL"
  aMenuMember(0).Value = sCommand
  aMenuMember(1).Name = "Type"
  aMenuMember(1).Value = _
      com.sun.star.ui.ItemType.SEPARATOR_LINE
  
  CreateSeparator = aMenuMember()
End Function

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