ScriptForgeライブラリ / PopupMenu
< 戻る
ScriptForgeライブラリのPopupMenu
を利用したpopup menuです。
サブメニューは 不等号で表します。
ID値は以下のようになります。
【Id】
Item A :1
Item B :2
Item B.1:3
Item B.2:4
--- :5
Item C :6
Item C.1 :7
Item C.1.1 :8
Item C.1.2 :9
Item C.2 :10
Item C.2.1 :11
Item C.2.2 :12
--- :13
Item C.2.3 :14
Item C.2.4 :15
Sub ShowPopup()
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
Dim myPopup As Object
Dim oPos_X as Integer, oPos_Y as Integer
oPos_X = 600
oPos_Y = 300
Set myPopup = CreateScriptService("SFWidgets.PopupMenu", ,oPos_X,oPos_Y)
With myPopup
.AddItem("Item A", name := "別名", Tooltip := "1")
.AddItem("Item B>Item B.1", Tooltip := "3")
.AddItem("Item B>Item B.2", Tooltip := "4")
.AddItem("---")
.AddItem("Item C>Item C.1>Item C.1.1", Tooltip := "8")
.AddItem("Item C>Item C.1>Item C.1.2", Tooltip := "9")
.AddItem("Item C>Item C.2>Item C.2.1", Tooltip := "11")
.AddItem("Item C>Item C.2>Item C.2.2", Tooltip := "12")
.AddItem("Item C>Item C.2>---")
.AddItem("Item C>Item C.2>Item C.2.3", Tooltip := "14")
.AddItem("Item C>Item C.2>Item C.2.4", Tooltip := "15")
End With
vResponse = myPopup.Execute()
MsgBox("Selected item ID: " & vResponse)
for i = 1 to 2
vResponse = myPopup.Execute(returnid := False)
MsgBox("Selected item Name(" & i & "): " & vResponse)
next i
myPopup.Dispose()
End Sub
RadioButton タイプの表示にすることも可能です。
選択したItemにCheck( 黒点 )が移ります。
右図の動画で、「いいえ」を選んだ後の表示では
Checkが移っていることがわかります
Sub ShowPopup()
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
Dim myPopup As Object
Dim oPos_X as Integer, oPos_Y as Integer
oPos_X = 300
oPos_Y = 300
Set myPopup = CreateScriptService("SFWidgets.PopupMenu", ,oPos_X,oPos_Y)
With myPopup
.AddRadioButton("Item A", name := "別名A", Tooltip := "1",status:= True)
.AddRadioButton("Item B", name := "別名B", , Tooltip := "2")
End With
i = 1
Do
vResponse = myPopup.Execute(returnid := False)
oDisp = vResponse & "で良いですか?"
oAns = msgbox(oDisp,4,"確認")
if oAns <> 7 then
exit Do
End If
i = i + 1
if i > 5 then
oDisp = "選択制限回数を超えました"
msgbox(oDisp,0,"終了")
exit sub
end if
Loop
MsgBox vResponse
myPopup.Dispose()
End Sub
CheckBox タイプの表示にすることも可能です。
選択したItemのCheckが変わります。
右図の動画で、「いいえ」を選んだ後の表示では
Checkが変わっていることがわかります。
ただし、取得できるのは、最後にクリックしたItemです。
Sub ShowPopup()
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
Dim myPopup As Object
Dim oPos_X as Integer, oPos_Y as Integer
oPos_X = 300
oPos_Y = 300
Set myPopup = CreateScriptService("SFWidgets.PopupMenu", ,oPos_X,oPos_Y)
With myPopup
.AddCheckBox("CheckBox1",status:= False)
.AddCheckBox("CheckBox2",status:= False)
End With
i = 1
Do
vResponse = myPopup.Execute(returnid := False)
oDisp = vResponse & "を変更しました。" & Chr(13) & Chr(13) & "終了しますか?"
oAns = msgbox(oDisp,4,"確認")
if oAns <> 7 then
exit Do
End If
i = i + 1
if i > 5 then
oDisp = "選択制限回数を超えました"
msgbox(oDisp,0,"終了")
exit sub
end if
Loop
myPopup.Dispose()
End Sub
Listener 及び Mouse Eventと組み合わせると MouseをClickした時にPopupMenuを表示させることが できます。 以下は 既存Dialog1上でMouseの右ボタンを Clickした時のみPopupMenuが表示されます。 注意: Dialog1は事前に作成しておく必要があります。
Global oUnoDialog As Object Sub DialogListener() Dim oMouseListener as Object DialogLibraries.LoadLibrary("Standard") oUnoDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1) ' ' Dialog1 に MouseClick Listenerの追加 oMouseListener = CreateUnoListener("Ltn_","com.sun.star.awt.XMouseListener") oUnoDialog.addMouseListener(oMouseListener) oUnoDialog.execute ' ' Mouse Listenerの削除 oUnoDialog.removeMouseListener(oMouseListener) ' oUnoDialog.dispose() msgbox "Success" End Sub ' MethodはDummyでも全て定義の事 Sub Ltn_disposing(oEvent as com.sun.star.lang.EventObject) End Sub ' Mouse Buutonが押された時 Sub Ltn_mousePressed(oEvent as com.sun.star.awt.MouseEvent) select case oEvent.Buttons case com.sun.star.awt.MouseButton.RIGHT call MyPopupClick(oEvent) end select End Sub ' Mouse Buutonがreleaseされた時 Sub Ltn_mouseReleased(oEvent as com.sun.star.awt.MouseEvent) End Sub Sub Ltn_mouseEntered(oEvent as com.sun.star.awt.MouseEvent) End Sub Sub Ltn_mouseExited(oEvent as com.sun.star.awt.MouseEvent) End Sub Sub MyPopupClick(Optional poMouseEvent as Object) GlobalScope.BasicLibraries.loadLibrary("ScriptForge") Dim myPopup As Object Set myPopup = CreateScriptService("PopupMenu", poMouseEvent) With myPopup .AddItem("Item A", name := "アイテム1", Tooltip := "1") .AddItem("Item B", name := "アイテム2", Tooltip := "2") end with Dim vResponse As Variant vResponse = myPopup.Execute(False) msgbox vResponse myPopup.Dispose() exit sub oBad: exit sub End Sub