ເນື້ອໃນ

# ບໍລິການ SFWidgets.Menu

ບໍລິການ Menu ສາມາດໃຊ້ເພື່ອສ້າງ ແລະ ລຶບເມນູອອກຈາກແຖບເມນູຂອງໜ້າຕ່າງເອກະສານ LibreOffice. ແຕ່ລະລາຍການເມນູສາມາດເຊື່ອມໂຍງກັບສະຄຣິບ ຫຼື ຄຳສັ່ງ UNO ໄດ້. ບໍລິການນີ້ມີຄວາມສາມາດດັ່ງນີ້:

- ການສ້າງເມນູດ້ວຍລາຍການທີ່ກຳນົດເອງ, ຊ່ອງໝາຍ (checkbox), ປຸ່ມເລືອກ (radio button) ແລະ ຕົວແຍກ.

- ການຕົກແຕ່ງລາຍການເມນູດ້ວຍໄອຄອນ ແລະ ຄຳແນະນຳເຄື່ອງມື (tooltip).

ເມນູທີ່ສ້າງຂຶ້ນດ້ວຍບໍລິການນີ້ຈະໃຊ້ໄດ້ສະເພາະໜ້າຕ່າງເອກະສານທີ່ລະບຸເທົ່ານັ້ນ. ພວກມັນຈະບໍ່ຖືກບັນທຶກໄວ້ໃນເອກະສານ ຫຼື ເປັນການຕັ້ງຄ່າແອັບພລິເຄຊັນ. ການປິດ ແລະ ເປີດເອກະສານໃໝ່ຈະເປັນການຄືນຄ່າການຕັ້ງຄ່າແຖບເມນູເລີ່ມຕົ້ນ.

ເມື່ອມີການແກ້ໄຂວັດຖຸ OLE ເຊັ່ນ ສູດ Math ຫຼື ແຜນພູມ Calc ພາຍໃນເອກະສານ, LibreOffice ຈະກຳນົດຄ່າແຖບເມນູໃໝ່ຕາມວັດຖຸນັ້ນ. ເມື່ອສິ່ງນີ້ເກີດຂຶ້ນ, ເມນູທີ່ສ້າງດ້ວຍບໍລິການ Menu ຈະຖືກລຶບອອກ ແລະ ຈະບໍ່ຖືກຄືນຄ່າຫຼັງຈາກແກ້ໄຂວັດຖຸ OLE ແລ້ວ.

## ການເອີ້ນໃຊ້ບໍລິການ

ກ່ອນທີ່ຈະໃຊ້ບໍລິການ Menu, ຕ້ອງໂຫລດ ຫຼື ນຳເຂົ້າໄລບຣາຣີ ScriptForge ກ່ອນ:

• ມາໂຄຣ Basic ຕ້ອງມີການໂຫຼດຄັງສຳນວນ ScriptForge ໂດຍໃຊ້ຄຳສັ່ງດັ່ງນີ້:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• ສະຄຣິບ Python ຕ້ອງມີການນຳເຂົ້າຈາກໂມດູນ scriptforge:
from scriptforge import CreateScriptService

##### ໃນ Basic

ບໍລິການ Menu ຖືກສ້າງຂຶ້ນໂດຍການເອີ້ນວິທີ CreateMenu ຈາກບໍລິການ Document. ຕົວຢ່າງລະຫັດດ້ານລຸ່ມນີ້ສ້າງເມນູຊື່ My Menu ໃນໜ້າຕ່າງເອກະສານປັດຈຸບັນ ໂດຍມີສອງລາຍການຄື Item A ແລະ Item B.

        Sub CreateMenu()
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim oDoc as Object, oMenu as Object
            Set oDoc = CreateScriptService("Document")
            Set oMenu = oDoc.CreateMenu("My Menu")
            With oMenu
                .AddItem("Item A", Command := "About")
                .AddItem("Item B", Script := "vnd.sun.star.script:Standard.Module1.ItemB_Listener?language=Basic&location=application")
                .Dispose()
            End With
        End Sub

ຫຼັງຈາກສ້າງເມນູແລ້ວ, ແນະນຳໃຫ້ເອີ້ນວິທີ Dispose ເພື່ອຄືນຊັບພະຍາກອນທີ່ໃຊ້ໂດຍອິນສະແຕນຊ໌ບໍລິການ Menu.

ໃນຕົວຢ່າງຂ້າງເທິງ, ລາຍການ A ແມ່ນກ່ຽວຂ້ອງກັບຄໍາສັ່ງ UNO .uno:About ໃນຂະນະທີ່ ລາຍການ B ແມ່ນກ່ຽວຂ້ອງກັບສະຄຣິບ ItemB_Listener ທີ່ຖືກກຳນົດໄວ້ໃນ Module1 ຂອງຄັງ Standard ໃນໂຕບັນຈຸ My Macros.

ຕົວຢ່າງຕໍ່ໄປນີ້ກຳນົດ ItemB_Listener ທີ່ຈະຖືກເອີ້ນໃຊ້ເມື່ອມີການຄລິກ Item B. ຕົວຟັງນີ້ຈະແຍກຂໍ້ຄວາມອາກິວເມັນທີ່ສົ່ງໃຫ້ Sub ແລະ ສະແດງພວກມັນໃນກ່ອງຂໍ້ຄວາມ.

        Sub ItemB_Listener(args As String)
            ' ປະມວນຜົນຂໍ້ຄວາມອາກິວເມັນທີ່ສົ່ງໃຫ້ຕົວຟັງ
            Dim sArgs as Object
            sArgs = Split(args, ",")
            MsgBox "Menu name: "   & sArgs(0) & Chr(13) & _
                   "Menu item: "   & sArgs(1) & Chr(13) & _
                   "Item ID: "     & sArgs(2) & Chr(13) & _
                   "Item status: " & sArgs(3)
        End Sub

ດັ່ງທີ່ສະແດງໃນຕົວຢ່າງຂ້າງເທິງ, ລາຍການເມນູທີ່ເຊື່ອມໂຍງກັບສະຄຣິບຈະໄດ້ຮັບອາກິວເມັນຂໍ້ຄວາມທີ່ແຍກດ້ວຍຈຸດຈຳ ເຊິ່ງມີຄ່າດັ່ງນີ້:

- ຊື່ລະດັບເທິງສຸດຂອງເມນູ.

- ID ຂໍ້ຄວາມຂອງລາຍການເມນູທີ່ຖືກເລືອກ.

- ID ຕົວເລກຂອງລາຍການເມນູທີ່ຖືກເລືອກ.

- ສະຖານະປັດຈຸບັນຂອງລາຍການເມນູ. ນີ້ມີປະໂຫຍດສຳລັບຊ່ອງໝາຍ ແລະ ປຸ່ມເລືອກ. ຖ້າລາຍການຖືກໝາຍ, ຈະສົ່ງຄືນຄ່າ "1", ຖ້າບໍ່ດັ່ງນັ້ນຈະສົ່ງຄືນຄ່າ "0".

##### ໃນ Python

ຕົວຢ່າງຂ້າງເທິງສາມາດຂຽນເປັນ Python ໄດ້ດັ່ງນີ້:

        from scriptforge import CreateScriptService

        def create_menu(args=None):
            oDoc = CreateScriptService("Document")
            oMenu = oDoc.CreateMenu("My Menu")
            oMenu.AddItem("Item A", command="About")
            oMenu.AddItem("Item B", script="vnd.sun.star.script:my_macros.py$item_b_listener?language=Python&location=user")
            oMenu.Dispose()

        def item_b_listener(args):
            bas = CreateScriptService("Basic")
            s_args = args.split(",")
            msg = f"Menu name: {s_args[0]}\n"
            msg += f"Menu item: {s_args[1]}\n"
            msg += f"Item ID: {s_args[2]}\n"
            msg += f"Item status: {s_args[3]}"
            bas.MsgBox(msg)

## ຄຸນສົມບັດ

ຊື່ | ອ່ານຢ່າງດຽວ | ປະເພດ | ຄຳອະທິບາຍ
--- | --- | --- | ---
ShortcutCharacter | ບໍ່ | String | ຕົວອັກສອນທີ່ໃຊ້ກຳນົດຄີເຂົ້າເຖິງຂອງລາຍການເມນູ. ຕົວອັກສອນເລີ່ມຕົ້ນແມ່ນ "~".
SubmenuCharacter | ບໍ່ | String | ຕົວອັກສອນ ຫຼື ຂໍ້ຄວາມທີ່ກຳນົດວ່າລາຍການເມນູຖືກຊ້ອນກັນແນວໃດ. ຕົວອັກສອນເລີ່ມຕົ້ນແມ່ນ ">".

## ເມນູ ແລະ ເມນູຍ່ອຍ

ເພື່ອສ້າງເມນູທີ່ມີເມນູຍ່ອຍ, ໃຫ້ໃຊ້ຕົວອັກສອນທີ່ກຳນົດໃນຄຸນສົມບັດ SubmenuCharacter ໃນຂະນະທີ່ສ້າງລາຍການເມນູເພື່ອລະບຸຕຳແໜ່ງທີ່ມັນຈະຢູ່.

        ' Item A
        ' Item B > Item B.1
        '          Item B.2
        ' ------ (line separator)
        ' Item C > Item C.1 > Item C.1.1
        '                     Item C.1.2
        ' Item C > Item C.2 > Item C.2.1
        '                     Item C.2.2
        '                     ------ (line separator)
        '                     Item C.2.3
        '                     Item C.2.4

ລະຫັດດ້ານລຸ່ມນີ້ໃຊ້ຕົວອັກສອນເມນູຍ່ອຍເລີ່ມຕົ້ນ ">" ເພື່ອສ້າງລຳດັບຊັ້ນຂອງເມນູ/ເມນູຍ່ອຍ:

        oMenu.AddItem("Item A")
        oMenu.AddItem("Item B>Item B.1")
        oMenu.AddItem("Item B>Item B.2")
        oMenu.AddItem("---")
        oMenu.AddItem("Item C>Item C.1>Item C.1.1")
        oMenu.AddItem("Item C>Item C.1>Item C.1.2")
        oMenu.AddItem("Item C>Item C.2>Item C.2.1")
        oMenu.AddItem("Item C>Item C.2>Item C.2.2")
        oMenu.AddItem("Item C>Item C.2>---")
        oMenu.AddItem("Item C>Item C.2>Item C.2.3")
        oMenu.AddItem("Item C>Item C.2>Item C.2.4")

ຂໍ້ຄວາມ --- ແມ່ນໃຊ້ເພື່ອສ້າງເສັ້ນຂັ້ນໃນເມນູ ຫຼື ເມນູຍ່ອຍ.

### ການໃຊ້ໄອຄອນ

ລາຍການໃນເມນູສາມາດມີໄອຄອນ, ເຊິ່ງຖືກລະບຸເປັນອາກິວເມນໃນເມັດທອດ AddCheckBox, AddItem ແລະ AddRadioButton.

ໄອຄອນທັງໝົດທີ່ມີໃນ LibreOffice ສາມາດໃຊ້ໄດ້ໂດຍການລະບຸເສັ້ນທາງຂອງມັນ.

INSTALLDIR/share/config

ໃຊ້ຄຸນສົມບັດ InstallFolder ຂອງບໍລິການ FileSystem ເພື່ອເບິ່ງວ່າ LibreOffice ຕິດຕັ້ງຢູ່ໃສ.

ໂຟນເດີນີ້ບັນຈຸໄຟລ໌ ZIP ທີ່ມີຮູບພາບໄອຄອນຊຸດຕ່າງໆ. ເພື່ອໃຊ້ໄອຄອນ, ໃຫ້ລະບຸໄຟລ໌ໄອຄອນພ້ອມເສັ້ນທາງພາຍໃນໄຟລ໌ ZIP.

ຕົວຢ່າງດ້ານລຸ່ມນີ້ໃຊ້ໄອຄອນ "sc_newdoc.svg" ທີ່ຕັ້ງຢູ່ໃນໂຟນເດີ "cmd".

##### ໃນ Basic

          myMenu.AddItem("Item A", Icon := "cmd/sc_newdoc.svg")

##### ໃນ Python

          myMenu.AddItem("Item A", icon="cmd/sc_newdoc.svg")

ຊຸດໄອຄອນທັງໝົດມີໂຄງສ້າງພາຍໃນຄືກັນ. ໄອຄອນທີ່ສະແດງແທ້ຈະຂຶ້ນກັບຊຸດໄອຄອນທີ່ກຳລັງໃຊ້ງານຢູ່.

## ວິທີການ

ລາຍຊື່ວິທີການໃນບໍລິການ Menu
AddCheckBox | AddItem | AddRadioButton

## AddCheckBox

ແຊກຊ່ອງໝາຍໃນເມນູ. ສົ່ງຄືນຄ່າຕົວເລກທີ່ລະບຸລາຍການທີ່ແຊກເຂົ້າໄປ.

### ໄວຍາກອນ:

svc.AddCheckBox(menuitem: str, opt name: str, opt status: bool, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### ພາຣາມິເຕີ:

menuitem: ກຳນົດຂໍ້ຄວາມທີ່ຈະສະແດງໃນເມນູ. ອາກິວເມັນນີ້ຍັງກຳນົດລຳດັບຊັ້ນຂອງລາຍການໃນເມນູໂດຍໃຊ້ຕົວອັກສອນເມນູຍ່ອຍ.

name: ຄ່າຂໍ້ຄວາມທີ່ໃຊ້ລະບຸລາຍການເມນູ. ໂດຍເລີ່ມຕົ້ນ, ຈະໃຊ້ສ່ວນປະກອບສຸດທ້າຍຂອງລຳດັບຊັ້ນເມນູ.

status: ກຳນົດວ່າລາຍການຈະຖືກເລືອກໃນຕອນສ້າງເມນູບໍ (ເລີ່ມຕົ້ນ = False).

icon: ເສັ້ນທາງ ແລະ ຊື່ຂອງໄອຄອນທີ່ຈະສະແດງ.

tooltip: ຂໍ້ຄວາມທີ່ຈະສະແດງເປັນຄຳແນະນຳເຄື່ອງມື.

command: ຊື່ຂອງຄຳສັ່ງ UNO ໂດຍບໍ່ມີຄຳນຳໜ້າ .uno:.

script: URI ສຳລັບສະຄຣິບ Basic ຫຼື Python ທີ່ຈະເຮັດວຽກເມື່ອຄລິກລາຍການ.

ອາກິວເມັນ command ແລະ script ບໍ່ສາມາດໃຊ້ພ້ອມກັນໄດ້, ດັ່ງນັ້ນຈຶ່ງຕັ້ງໄດ້ພຽງຢ່າງດຽວສຳລັບແຕ່ລະລາຍການເມນູ.

ອ່ານ ຂໍ້ກຳນົດສະເພາະຂອງ URI ສຳລັບໂຄງຮ່າງການຂຽນສະຄຣິບ ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບໄວຍາກອນ URI ທີ່ໃຊ້ໃນອາຄິວເມັນ script.

### ຕົວຢ່າງ:

##### ໃນ Basic

          ' ລາຍການເມນູທີ່ເຊື່ອມໂຍງກັບຄຳສັ່ງ .uno:Paste
          oMenu.AddCheckBox("Item A", Status := True, ToolTip := "Paste values", Command := "Paste")
          ' ລັນສະຄຣິບ Basic Standard.Module1.MyListener ທີ່ເກັບໄວ້ໃນເອກະສານ
          oMenu.AddCheckBox("Item B", Status := False, Script := "vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          ' ລັນສະຄຣິບ Python MyListener ທີ່ຕັ້ງຢູ່ໃນໄຟລ໌ myScripts.py ໃນໂຟນເດີສະຄຣິບຜູ້ໃຊ້
          oMenu.AddCheckBox("Item C", Status := True, Script := "vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

##### ໃນ Python

          oMenu.AddCheckBox("Item A", status=True, tooltip="Paste values", command="Paste")
          oMenu.AddCheckBox("Item B", status=False, script="vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          oMenu.AddCheckBox("Item C", Status=True, Script="vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

## AddItem

ແຊກລາຍການປ້າຍຊື່ໃນເມນູ. ສົ່ງຄືນຄ່າຕົວເລກທີ່ລະບຸລາຍການທີ່ແຊກເຂົ້າໄປ.

### ໄວຍາກອນ:

svc.AddItem(menuitem: str, opt name: str, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### ພາຣາມິເຕີ:

menuitem: ກຳນົດຂໍ້ຄວາມທີ່ຈະສະແດງໃນເມນູ.

name: ຄ່າຂໍ້ຄວາມທີ່ຈະສົ່ງຄືນເມື່ອຄລິກລາຍການ.

icon: ເສັ້ນທາງ ແລະ ຊື່ຂອງໄອຄອນທີ່ຈະສະແດງ.

tooltip: ຂໍ້ຄວາມທີ່ຈະສະແດງເປັນຄຳແນະນຳເຄື່ອງມື.

command: ຊື່ຂອງຄຳສັ່ງ UNO ໂດຍບໍ່ມີຄຳນຳໜ້າ .uno:.

script: URI ສຳລັບສະຄຣິບ Basic ຫຼື Python ທີ່ຈະເຮັດວຽກເມື່ອຄລິກລາຍການ.

ອາກິວເມັນ command ແລະ script ບໍ່ສາມາດໃຊ້ພ້ອມກັນໄດ້, ດັ່ງນັ້ນຈຶ່ງຕັ້ງໄດ້ພຽງຢ່າງດຽວສຳລັບແຕ່ລະລາຍການເມນູ.

ອ່ານ ຂໍ້ກຳນົດສະເພາະຂອງ URI ສຳລັບໂຄງຮ່າງການຂຽນສະຄຣິບ ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບໄວຍາກອນ URI ທີ່ໃຊ້ໃນອາຄິວເມັນ script.

### ຕົວຢ່າງ:

##### ໃນ Basic

          oMenu.AddItem("Item A", Tooltip := "A descriptive message")

##### ໃນ Python

          oMenu.AddItem("Item A", tooltip = "A descriptive message")

## AddRadioButton

ແຊກປຸ່ມເລືອກ (radio button) ໃນເມນູ. ສົ່ງຄືນຄ່າຕົວເລກທີ່ລະບຸລາຍການທີ່ແຊກເຂົ້າໄປ.

### ໄວຍາກອນ:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: str, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### ພາຣາມິເຕີ:

menuitem: ກຳນົດຂໍ້ຄວາມທີ່ຈະສະແດງໃນເມນູ.

name: ຄ່າຂໍ້ຄວາມທີ່ຈະສົ່ງຄືນເມື່ອຄລິກລາຍການ.

status: ກຳນົດວ່າລາຍການຈະຖືກເລືອກໃນຕອນສ້າງເມນູບໍ (ເລີ່ມຕົ້ນ = False).

icon: ເສັ້ນທາງ ແລະ ຊື່ຂອງໄອຄອນທີ່ຈະສະແດງ.

tooltip: ຂໍ້ຄວາມທີ່ຈະສະແດງເປັນຄຳແນະນຳເຄື່ອງມື.

command: ຊື່ຂອງຄຳສັ່ງ UNO ໂດຍບໍ່ມີຄຳນຳໜ້າ .uno:.

script: URI ສຳລັບສະຄຣິບ Basic ຫຼື Python ທີ່ຈະເຮັດວຽກເມື່ອຄລິກລາຍການ.

ອາກິວເມັນ command ແລະ script ບໍ່ສາມາດໃຊ້ພ້ອມກັນໄດ້, ດັ່ງນັ້ນຈຶ່ງຕັ້ງໄດ້ພຽງຢ່າງດຽວສຳລັບແຕ່ລະລາຍການເມນູ.

ອ່ານ ຂໍ້ກຳນົດສະເພາະຂອງ URI ສຳລັບໂຄງຮ່າງການຂຽນສະຄຣິບ ເພື່ອຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບໄວຍາກອນ URI ທີ່ໃຊ້ໃນອາຄິວເມັນ script.

### ຕົວຢ່າງ:

##### ໃນ Basic

          oMenu.AddRadioButton("Item A", Name := "A", Status := True)

##### ໃນ Python

          oMenu.AddRadioButton("Item A", name="A", status=True)

ຣູທີນ ຫຼື ຕົວລະບຸ Basic ຂອງ ScriptForge ທັງໝົດທີ່ຂຶ້ນຕົ້ນດ້ວຍເຄື່ອງໝາຍຂີດກ້ອງ "_" ແມ່ນສະຫງວນໄວ້ສຳລັບໃຊ້ພາຍໃນ. ພວກມັນບໍ່ໄດ້ມີໄວ້ໃຫ້ໃຊ້ໃນມາໂຄຣ Basic ຫຼື ສະຄຣິບ Python.

ຫົວຂໍ້ທີ່ກ່ຽວຂ້ອງ

ບໍລິການ SFWidgets.PopupMenu

ບໍລິການ SFDocuments.Document

ກະລຸນາສະໜັບສະໜູນພວກເຮົາ!