ເນື້ອໃນ

# ບໍລິການ SFWidgets.PopupMenu

ບໍລິການ PopupMenu ສາມາດໃຊ້ເພື່ອສ້າງເມນູປັອບອັບທີ່ສາມາດເຊື່ອມໂຍງກັບເຫດການ ຫຼື ເຮັດວຽກໂດຍສະຄຣິບ. ບໍລິການນີ້ມີຄວາມສາມາດດັ່ງນີ້:

- ການສ້າງເມນູປັອບອັບດ້ວຍລາຍການທີ່ກຳນົດເອງ, ຊ່ອງໝາຍ ແລະ ປຸ່ມເລືອກ.

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

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

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

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

##### ໃນ Basic

ບໍລິການ PopupMenu ສາມາດສ້າງໄດ້ຫຼາຍວິທີ. ຕົວຢ່າງດ້ານລຸ່ມນີ້ສ້າງເມນູປັອບອັບໂດຍບໍ່ໄດ້ເຊື່ອມໂຍງກັບເມົາສ໌ ຫຼື ເຫດການຂອງແອັບພລິເຄຊັນ.

        Sub ShowPopup
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim myPopup As Object
            Set myPopup = CreateScriptService("SFWidgets.PopupMenu", , 300, 300)
            myPopup.AddItem("Item ~A")
            myPopup.AddItem("Item ~B")
            vResponse = myPopup.Execute()
            MsgBox("Selected item ID: " & vResponse)
            myPopup.Dispose()
        End Sub

ການລັນ Sub ທີ່ກຳນົດໄວ້ຂ້າງເທິງຈະສ້າງເມນູປັອບອັບທີ່ມີສອງລາຍການທີ່ຕຳແໜ່ງ X=300 ແລະ Y=300 ເທິງໜ້າຈໍ.

ສາມາດລະຄຳນຳໜ້າ SFWidgets ໄດ້ໃນຂະນະທີ່ເອີ້ນໃຊ້ບໍລິການ PopupMenu.

ຕົວຢ່າງຕໍ່ໄປນີ້ກຳນົດ Sub ທີ່ສາມາດເຊື່ອມໂຍງກັບເຫດການເມົາສ໌:

        Sub MyPopupClick(Optional poMouseEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
            ' ເພີ່ມລາຍການໃສ່ເມນູປັອບອັບ
            Dim vResponse As Variant
            vResponse = myPopup.Execute(False)
            ' ເຮັດບາງຢ່າງຕາມຄ່າ vResponse
            ' ...
            myPopup.Dispose()
        End Sub

ໃຊ້ວິທີ Dispose ເພື່ອຄືນຊັບພະຍາກອນຫຼັງຈາກໃຊ້ງານເມນູປັອບອັບແລ້ວ.

ນອກຈາກນັ້ນ ຍັງສາມາດເຊື່ອມໂຍງເມນູປັອບອັບກັບເຫດການທີ່ຖືກກະຕຸ້ນໂດຍແອັບພລິເຄຊັນ LibreOffice, ຟອມ ແລະ ການຄວບຄຸມໄດອາລັອກ ໄດ້ນຳ.

        Sub MyPopupClick(Optional poEvent as Object)
            Dim myPopup As Object
            Set myPopup = CreateScriptService("PopupMenu", poEvent)
            ' ...
        End Sub

##### ໃນ Python

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

        from scriptforge import CreateScriptService

        def show_popup(args=None):
            my_popup = CreateScriptService("SFWidgets.PopupMenu", None, 300, 300)
            bas = CreateScriptService("Basic")
            my_popup.AddItem("Item ~A")
            my_popup.AddItem("Item ~B")
            response = my_popup.Execute()
            bas.MsgBox(f"Selected item ID: {response}")
            my_popup.Dispose()

        def my_popup_click(poEvent=None):
            my_popup = CreateScriptService("SFWidgets.PopupMenu", poEvent)
            # ເພີ່ມລາຍການໃສ່ເມນູປັອບອັບ
            response = my_popup.Execute()
            # ເຮັດບາງຢ່າງຕາມຄ່າຕອບສະໜອງ
            my_popup.Dispose()

## ຄຸນສົມບັດ

ຊື່ | ອ່ານຢ່າງດຽວ | ປະເພດ | ຄຳອະທິບາຍ
--- | --- | --- | ---
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

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

        myPopup.AddItem("Item A")
        myPopup.AddItem("Item B>Item B.1")
        myPopup.AddItem("Item B>Item B.2")
        myPopup.AddItem("---")
        myPopup.AddItem("Item C>Item C.1>Item C.1.1")
        myPopup.AddItem("Item C>Item C.1>Item C.1.2")
        myPopup.AddItem("Item C>Item C.2>Item C.2.1")
        myPopup.AddItem("Item C>Item C.2>Item C.2.2")
        myPopup.AddItem("Item C>Item C.2>---")
        myPopup.AddItem("Item C>Item C.2>Item C.2.3")
        myPopup.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")

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

## ວິທີການ

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

## AddCheckBox

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

### ໄວຍາກອນ:

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

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

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

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

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

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

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

### ຕົວຢ່າງ:

##### ໃນ Basic

          myPopup.AddCheckBox("Option A", Status := True)

##### ໃນ Python

          my_popup.AddCheckBox("Option A", status=True)

## AddItem

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

### ໄວຍາກອນ:

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

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

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

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

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

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

### ຕົວຢ່າງ:

##### ໃນ Basic

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

##### ໃນ Python

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

## AddRadioButton

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

### ໄວຍາກອນ:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: str): int

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

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

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

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

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

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

### ຕົວຢ່າງ:

##### ໃນ Basic

          myPopup.AddRadioButton("Option A", Name := "A", Status := True)

##### ໃນ Python

          my_popup.AddRadioButton("Option A", name="A", status=True)

## Execute

ສະແດງເມນູປັອບອັບ ແລະ ລໍຖ້າການກະທຳຂອງຜູ້ໃຊ້. ສົ່ງຄືນລາຍການທີ່ຜູ້ໃຊ້ຄລິກ.

ຖ້າຜູ້ໃຊ້ຄລິກຢູ່ນອກເມນູປັອບອັບ ຫຼື ກົດປຸ່ມ Esc, ຈະບໍ່ມີລາຍການໃດຖືກເລືອກ. ໃນກໍລະນີດັ່ງກ່າວ, ຄ່າທີ່ສົ່ງຄືນແມ່ນຂຶ້ນກັບພາລາມິເຕີ returnid. ຖ້າ returnid = True ແລະ ບໍ່ມີລາຍການໃດຖືກເລືອກ, ຄ່າ 0 (ສູນ) ຈະຖືກສົ່ງຄືນ. ຖ້າບໍ່ດັ່ງນັ້ນ ຈະສົ່ງຄືນເປັນສາຍອັກຂະລະຫວ່າງປ່າວ "".

### ໄວຍາກອນ:

svc.Execute(opt returnid: bool = True): any

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

returnid: ຖ້າ True ລະຫັດ ID ຂອງລາຍການທີ່ເລືອກຈະຖືກສົ່ງຄືນ. ຖ້າ False ເມັດທອດຈະສົ່ງຄືນຊື່ຂອງລາຍການ (ຄ່າເລີ່ມຕົ້ນ = True).

### ຕົວຢ່າງ:

ໃນຕົວຢ່າງດ້ານລຸ່ມນີ້, ເມນູປັອບອັບຖືກສ້າງຂຶ້ນ ແລະ ສົ່ງຄືນຊື່ລາຍການ ເພາະອາກິວເມັນ returnid ຖືກຕັ້ງເປັນ False.

##### ໃນ Basic

          myPopup.AddItem("Item A", Name := "A")
          myPopup.AddItem("Item B", Name := "B")
          Dim vResponse as Variant
          vResponse = myPopup.Execute(False)

##### ໃນ Python

          my_popup.AddItem("Item A", name="A")
          my_popup.AddItem("Item B", name="B")
          response = my_popup.Execute(False)

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

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

ບໍລິການ SFDialogs.Dialog

ບໍລິການ SFDialogs.DialogControl

ບໍລິການ SFWidgets.Menu

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