ボタンと PopupMenu 
ツール - カスタマイズで表示されるダイアログには下向き矢印の付いているボタンがあり、ボタンを押すとメニューが表示されます。同じようなボタンを作成してみます。

dialog_popupmenu.odt

ボタンを押すと次のプロシージャが実行されてメニューが表示されます。
Sub PopupButton
' get the size of the button
oButton = oDialog.getControl("CommandButton1")
aPosSize = oButton.PosSize
' set the position of the popup menu
Dim aRect As New com.sun.star.awt.Rectangle
With aRect
.X = aPosSize.X
.Y = aPosSize.Y + aPosSize.Height
.Width = 0'100
.Height = 0'100
End With
' menu listener
oMenuListener = CreateUnoListener( _
"PopupMenuListener_", "com.sun.star.awt.XMenuListener")
' new popupmenu
oPopupMenu = CreateUnoService("com.sun.star.awt.PopupMenu")
' set listener and insert menu items
With oPopupMenu
.addMenuListener(oMenuListener)
.insertItem(1,"Menu 1",0,0) 'id, label, type, position
.insertItem(2,"Menu 2",0,2)
.insertSeparator(1)
.setCommand(1,"item1")
.setCommand(2,"item2")
End With
' show popup menu
oPopupMenu.execute(oDialog.Peer,aRect, _
com.sun.star.awt.PopupMenuDirection.EXECUTE_DEFAULT)
oPopupMenu.removeMenuListener(oMenuListener)
End Sub
以下はリスナー用のプロシージャです。メニューが選択されたとき、選択されたメニュー Id からメニューに割り当てられたコマンドを取得しています。
Sub PopupMenuListener_select ( oEv )
sCmd = oEv.Source.getCommand(oEv.MenuId)
msgbox sCmd
End Sub
Sub PopupMenuListener_highlight ( oEv )
End Sub
Sub PopupMenuListener_activate ( oEv )
End Sub
Sub PopupMenuListener_deactivate ( oEv )
End Sub
Sub PopupMenuListener_disposing( oEv )
End Sub
以下のインターフェース参照。
- com.sun.star.awt.XMenu
- com.sun.star.awt.XMenuBar
- com.sun.star.awt.XMenuExtended
- com.sun.star.awt.XPopupMenu
- com.sun.star.awt.XMenuListener