Top > OOoBasic > Window > Menu

メニュー Edit

ウィンドウの最上部にあるメニュー。メニューが利用できるのは一般的なウィンドウで .awt.WindowClass.TOP の指定が必要です。

3.1 からメニューで使用する PopupMenu が拡張されています。メニューにロゴを表示したり、グラデーションの線、メニューの項目へのアイコン画像の表示、ツールチップの指定、項目のショートカットキーの表示指定などです。

3.0 以前でもメニューは利用できますが、サービス名の修正などの記述が面倒なので 3.1 以降についてです。

ウィンドウ Edit

このページではOOoBasic/Windowなどで作成しているウィンドウに対してメニューを追加します。OOoBasic/Dialog/Example17を参考にしてください。

ウィンドウの作成は複雑なので割愛します。

メニューの作成 Edit

com.sun.star.awt.MenuBar サービスをインスタンス化してウィンドウに追加します。stardiv.vcl.MenuBar は古い名称ですので使用しないでください。

 oMenuBar = CreateUnoService("com.sun.star.awt.MenuBar") '"stardiv.vcl.MenuBar")
 With oMenuBar
   .insertItem(1,"File",0,0)
   .insertItem(2,"Help",0,1)
   .setPopupMenu(1,oFile_Pop)
   .setPopupMenu(2,oHelp_Pop)
 End With

 oWindow.setMenuBar(oMenuBar)

普通はウィンドウにメニューバーを追加する前に項目の追加およびポップアップメニューを追加します。上記では "File" メニューおよび "Help" メニュー項目を追加、さらにメニューをクリックした時に表示されるポップアップメニューを設定しています。

メニューバーにはリスナーは必要ありません、選択された項目に応じたポップアップメニューが表示されます。

メニューの削除 Edit

ウィンドウに追加したメニューを削除する場合には setMenuBar メソッドに Null を指定します。ウィンドウを閉じる前に行うとクラッシュしなくなるようです。

ポップアップメニュー Edit

メニューバーの項目を選択した時に表示されるポップアップメニューを作成するには com.sun.star.awt.PopupMenu サービスをインスタンス化して項目を追加していきます。

 oFile_Pop = CreateUnoService("com.sun.star.awt.PopupMenu")'"stardiv.vcl.PopupMenu")
 With oFile_Pop
   .insertItem(1,"~Close",0,0)
   .setCommand(1,"close")
 End With

項目の設定については下記参照。

項目の追加と削除 Edit

項目に必要なのは項目の Id および位置です。そのほか、表示テキストなど項目に応じて項目のスタイルやサブメニューなどを設定します。

項目 Edit

insertItem メソッドで新しいメニュー項目を追加します。メニュー Id、表示するテキスト、項目のスタイル、位置を指定します。

oFile_Pop.insertItem(1,"~Close",0,0)

項目のスタイルは com.sun.star.awt.MenuItemStyle で指定します。特殊な項目以外の普通の項目では 0 を指定します。

com.sun.star.awt.MenuItemStyle
CHECKABLE1チェック可能
RADIOCHECK2周囲依存ラジオタイプ
AUTOCHECK4選択時に自動チェック

コマンド Edit

メニューが選択された時にリスナーのイベントオブジェクトからどの項目が選択されたかを知るためにメニューの項目にコマンドを割り振ることができます。 このコマンドを利用すればポップアップメニューに一つのメニューリスナーで対応できます。

setCommand メソッドにメニュー Id および割り当てるコマンドを指定します。

 oHelp_Pop = CreateUnoService("com.sun.star.awt.PopupMenu")
 With oHelp_Pop
   .insertItem(1,"Help Item 1",0,1)
   .setCommand(1,"help")
   .insertSeparator(2)
   .insertItem(2,"Help Item 2",0,3)
   .setCommand(2,"about")
 End With

上記の場合、リスナーでは次のようにして選択されたメニューに割り当てられたコマンドを取得します。

Sub MenuListener_select( oEv )
 sCmd = oEv.Source.getCommand(oEv.MenuId)
 
 Select Case sCmd
 Case "close"
   ' close window by the menu entry
   oWindow.removeTopWindowListener(oWindowListener)
   oWindow.setMenubar(Null)
   oWindow.dispose()
   oFrame.close(True)
 Case "help"
   msgbox "Needs to help !"
 Case "about"
   msgbox "About this example:" & "..."
 End Select
End Sub

select メソッドの引数の com.sun.star.awt.MenuEvent から取得できるのは選択されたメニューの Id のみです。そこで、イベントオブジェクトの Source 要素 (ここでの Source は選択されたメニューが所属しているポップアップメニューオブジェクト) からメニュー Id を指定して、その Id に割り当てられたコマンドを調べます。

コマンドにはプロトコルなども付けると分かりやすくなりますし、他の人が作成したコマンドと重複することが避けられます。プロトコルハンドラーなどを使用した場合にはその点に注意が必要です。

また、このコマンドは項目にフォーカスがあるときに F1 ボタンを押して表示されるヘルプページと対応します。拡張機能ヘルプを提供している場合には同じコマンドを設定するとヘルプのページを容易に参照できるようになります。

チェック Edit

チェックが可能な項目の場合、チェックのオン/オフを切り替えられます。項目の Id およびチェックの有無を指定します。

oHelp_Pop.checkItem(1, True)

チェックされているかどうかの判定は isItemChecked メソッドに調べたい項目の Id を指定して行います。

AUTOCHECK を指定した項目では、ユーザーが項目を選択した時点でチェックの表示が切り替わっているためコードでチェックを変更する必要はありませんが、内部のステータスと項目の状態を最初にあわせておく必要があります。

RADIOCHECK を指定した項目のチェックの切り替えはコードで行う必要があります。

ショートカットキー表示 Edit

対応するメニューの項目にショートカットキーを表示できます。3.1

setAcceleratorKeyEvent メソッドにメニューの Id および KeyEvent struct でショートカットキーを指定します。

 aKeyEv = CreateUnoStruct("com.sun.star.awt.KeyEvent")
 With aKeyEv
   .KeyCode = com.sun.star.awt.Key.H
   '.KeyChar = "H"
   .Modifiers = com.sun.star.awt.KeyModifier.MOD1 'Ctrl
 End With
 
 oHelp_Pop.setAcceleratorKeyEvent(1, aKeyEv)

アイコンの表示 Edit

項目にアイコン画像を設定します。3.1

 aProp = CreateUnoStruct("com.sun.star.beans.PropertyValue")
 aProp.Name = "URL"
 aProp.Value = "file:///E:/usr/current_16.png"
 oGP = CreateUnoService("com.sun.star.graphic.GraphicProvider")
 aGraphic1 = oGP.queryGraphic(Array(aProp))

 oHelp_Pop.setItemImage(1, aGraphic1, False)

setItemImage メソッドの引数は、メニューの Id、設定する画像の XGraphic、画像のサイズ調整の有無です。

ヘルプツールチップ Edit

項目上にマウスカーソルがきたときに表示されるツールチップのテキストを設定します。3.1

oHelp_Pop.setTipHelpText(1, "Help Tooltip")

メソッドの引数はメニュー項目の Id、表示するテキストです。

サブ項目 Edit

項目にサブ項目が表示されるようにするには setPopupMenu メソッドでサブ項目用のポップアップメニューを追加します。メニュー Id およびポップアップメニューを指定します。

oFile_Pop.setPopupMenu(5, oFile_New_Pop)

区切り線 Edit

insertSeparator メソッドの引数に位置を指定して区切り線を追加します。

oFile_Pop.insertSeparator(2)

ロゴ Edit

ロゴとグラデーションのついたラインをメニューの左側に表示します。3.1

 aProp2 = CreateUnoStruct("com.sun.star.beans.PropertyValue")
 aProp2.Name = "URL"
 aProp2.Value = "file:///E:/usr/current_16.png"

 aMenuLogo = CreateUnoStruct("com.sun.star.awt.MenuLogo")
 with aMenuLogo
   .Graphic = oGP.queryGraphic(Array(aProp2))
   .StartColor = RGB(255, 255, 255)
   .EndColor = RGB(0, 0, 0)
 End With
 
oHelp_Pop.setLogo(aMenuLogo)

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