ບໍລິການ SFWidgets.ContextMenu

ເມນູຄລິກຂວາ (Context menus) ຖືກກຳນົດໄວ້ລ່ວງໜ້າຕັ້ງແຕ່ຕອນຕິດຕັ້ງ LibreOfficeDev. ທ່ານສາມາດປັບແຕ່ງພວກມັນໄດ້ໃນກ່ອງໂຕ້ຕອບ Tools + Customize.

ບໍລິການ ContextMenu ມີຄວາມສາມາດດັ່ງນີ້:

ການຕັ້ງຄ່າເມນູໃໝ່ຈະບໍ່ຖືກບັນທຶກໄວ້ໃນບ່ອນໃດ. ທັງໃນເອກະສານ ແລະ ໃນການຕັ້ງຄ່າຂອງ LibreOfficeDev.

ເມນູຄລິກຂວາປົກກະຕິຈະຖືກຮຽກໃຊ້ໂດຍການຄລິກຂວາໃສ່ພື້ນທີ່ສະເພາະຂອງເອກະສານ. ເຊັ່ນ: ການຄລິກໃສ່ເຊລ ຫຼື ແຖບແຜ່ນງານໃນເອກະສານ Calc.

ການຮຽກໃຊ້ບໍລິການ

ກ່ອນທີ່ຈະໃຊ້ບໍລິການ ContextMenu, ຫ້ອງສະໝຸດ ScriptForge ຈຳເປັນຕ້ອງຖືກໂຫຼດ ຫຼື ນຳເຂົ້າມາກ່ອນ:

ໄອຄອນ ບັນທຶກ

• ມາໂຄຣ Basic ຕ້ອງມີການໂຫຼດຄັງສຳນວນ ScriptForge ໂດຍໃຊ້ຄຳສັ່ງດັ່ງນີ້:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• ສະຄຣິບ Python ຕ້ອງມີການນຳເຂົ້າຈາກໂມດູນ scriptforge:
from scriptforge import CreateScriptService


ໃນ Basic

ບໍລິການ ContextMenu ຖືກສ້າງຂຶ້ນຈາກວິທີການ SF_Document.ContextMenus() ແລະ SF_Datasheet.ContextMenus() ເທົ່ານັ້ນ.


    Sub DefineContextMenu()
        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
        Dim calc As Object, menu As Object
        Set calc = CreateScriptService("Document", ThisComponent)
        Set menu = calc.ContextMenus("cell")  ' Right-click on a cell
        '  ... Define the context menu ...
        menu.Dispose()
    End Sub
  

ການເຮັດວຽກຂອງ Sub ທີ່ກຳນົດຂ້າງເທິງ ຈະເປັນການກຳນົດເມນູຄລິກຂວາໃໝ່ທີ່ກ່ຽວຂ້ອງກັບພື້ນທີ່ສະເພາະໃນເອກະສານ, ໃນທີ່ນີ້ແມ່ນເຊລໃນເອກະສານ Calc.

ການກຳນົດຄ່າໃໝ່ນີ້ຈະຍັງຄົງຢູ່ຈົນກວ່າເອກະສານຈະຖືກປິດ ຫຼື ຈົນກວ່າຈະມີການກຳນົດເມນູຄລິກຂວາໃໝ່ອີກຄັ້ງ.

ໄອຄອນ ເຄັດລັບ

ໃຊ້ວິທີການ Dispose ເພື່ອຄືນຄ່າຊັບພະຍາກອນ (free resources) ຫຼັງຈາກໃຊ້ງານເມນູຄລິກຂວາສຳເລັດ.


ໃນ Python

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


    from scriptforge import CreateScriptService
    
    def DefineContextMenu(args=None):
        basic = CreateScriptService("Basic")
        calc = CreateScriptService("Document", basic.ThisComponent)
        menu = calc.ContextMenus("cell")  # Right-click on a cell
        #  ... Define the context menu ...
        menu.Dispose()
  

ຄຸນສົມບັດ

ຊື່

ອ່ານຢ່າງດຽວ

ປະເພດ

ຄຳອະທິບາຍ

ParentDocument

ແມ່ນ

Object

ອິນສະແຕນ (instance) ຂອງຄລາດເອກະສານແມ່ (ຫຼື ໜຶ່ງໃນຄລາດຍ່ອຍຂອງມັນ).

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
  

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


    menu.AddItem("Item A")
    menu.AddItem("Item B>Item B.1")
    menu.AddItem("Item B>Item B.2")
    menu.AddItem("---")
    menu.AddItem("Item C>Item C.1>Item C.1.1")
    menu.AddItem("Item C>Item C.1>Item C.1.2")
    menu.AddItem("Item C>Item C.2>Item C.2.1")
    menu.AddItem("Item C>Item C.2>Item C.2.2")
    menu.AddItem("Item C>Item C.2>---")
    menu.AddItem("Item C>Item C.2>Item C.2.3")
    menu.AddItem("Item C>Item C.2>Item C.2.4")
  
ໄອຄອນ ບັນທຶກ

ສະຕຣິງ --- ແມ່ນໃຊ້ເພື່ອສ້າງເສັ້ນຂັ້ນໃນເມນູ ຫຼື ເມນູຍ່ອຍ.


ການໃຊ້ໄອຄອນ

ຕ່າງຈາກເມນູປ໊ອບອັບ, ລາຍການເມນູຄລິກຂວາ (context menu) ຕ້ອງບໍ່ມີໄອຄອນໃດໆ.

ວິທີການ

ລາຍຊື່ວິທີການໃນບໍລິການ ContextMenu

Activate

AddItem

RemoveAllItems


Activate

ເຮັດໃຫ້ ລາຍການທີ່ເພີ່ມເຂົ້າ ຂອງ ເມນູຄລິກຂວາທີ່ເກັບໄວ້ໃນເອກະສານ ສາມາດໃຊ້ງານໄດ້ ຫຼື ປິດການໃຊ້ງານ, ຂຶ້ນກັບອາຄິວເມນ.

ໄວຍາກອນ:

svc.Activate(opt enable: bool = True)

ພາຣາມິເຕີ:

enable: ເມື່ອເປັນ True (ຄ່າເລີ່ມຕົ້ນ), ເມນູທ້ອງຖິ່ນທີ່ເກັບໄວ້ໃນເອກະສານຈະຖືກເປີດໃຊ້. ເມື່ອເປັນ False, ເມນູທ້ອງຖິ່ນຈະຖືກລະເລີຍ ແລະ ເມນູສ່ວນກາງທີ່ກຳນົດໃນລະດັບ LibreOfficeDev ຈະຖືກນຳມາໃຊ້ແທນ.

AddItem

ແຊກລາຍການເມນູລົງໃນເມນູຄລິກຂວາ.

ໄວຍາກອນ:

svc.AddItem(menuitem: str, opt command: str, opt script: str)

ພາຣາມິເຕີ:

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

command: ຊື່ຂອງຄຳສັ່ງ UNO ທີ່ຈະຖືກເອີ້ນໃຊ້ເມື່ອຄລິກລາຍການນັ້ນ, ໂດຍບໍ່ຕ້ອງມີຄຳນຳໜ້າ .uno:. ຖ້າບໍ່ມີຊື່ຄຳສັ່ງນັ້ນ ຫຼື ບໍ່ສາມາດໃຊ້ໄດ້, ຈະບໍ່ມີຫຍັງເກີດຂຶ້ນ.

script: ທີ່ຢູ່ URI ສຳລັບສະຄຣິບ Basic ຫຼື Python ທີ່ຈະຖືກເອີ້ນໃຊ້ເມື່ອຄລິກລາຍການນັ້ນ. ສັງເກດວ່າສະຄຣິບທີ່ໃຫ້ມາຈະບໍ່ໄດ້ຮັບອາຄິວເມນໃດໆ.

ຕົວຢ່າງ:

ໃນ Basic

      menu.AddItem("Menu top>Item 1", command := "About")
      menu.AddItem("Menu top>Item 2", script := "vnd.sun.star.script:myLib.Module1.ThisSub?language=Basic&location=document")
    
ໃນ Python

      menu.AddItem('Menu top>Item 1', command = 'About')
      menu.AddItem('Menu top>Item 2', script = 'vnd.sun.star.script:Module1.py$thisdef?language=Python&location=document')
    

RemoveAllItems

ລຶບລາຍການທັງໝົດອອກ, ທັງ

ການດຳເນີນການນີ້ບໍ່ສາມາດກັບຄືນໄດ້ ຍົກເວັ້ນແຕ່ຈະປິດ ແລະ ເປີດເອກະສານຄືນໃໝ່.

ຫຼັງຈາກນັ້ນ, ເມື່ອຕ້ອງການ, ໃຫ້ໃຊ້ AddItem() ເພື່ອແຊກລາຍການເມນູໃໝ່.

ໄວຍາກອນ:

svc.RemoveAllItems()

ຕົວຢ່າງ:

ເຊື່ອມໂຍງ Sub/def ຖັດໄປກັບເຫດການຄລິກຂວາຂອງແຜ່ນງານ. ເມນູທີ່ປັບແຕ່ງເອງຈະປະກົດຂຶ້ນເມື່ອຄລິກຂວາໃນຖັນ C ຂອງແຜ່ນງານ Calc, ຖ້າບໍ່ດັ່ງນັ້ນຈະຍັງຄົງຮັກສາພຶດຕິກຳປົກກະຕິໄວ້.

ໃນ Basic

      Sub OnRightClick1(Optional XRange)  '  Xrange is a com.sun.star.table.XCellRange object
      Dim calc As Object, menu As Object, in_column As Boolean
      Set calc = CreateScriptService("Calc", ThisComponent)
      Set menu = calc.ContextMenus("cell")
      menu.RemoveAllItems()
      in_column = ( Len(calc.Intersect("Sheet1.$C:$C", XRange.AbsoluteName)) > 0 )
      If in_column Then
          menu.AddItem("A", script := "vnd.sun.star.script:Standard.Module1.EnterA?language=Basic&location=document")
          ' ...
      End If
      menu.Activate(in_column)
      End Sub
    
ໃນ Python

        def OnRightClick1(XRange = None)  #  Xrange is a com.sun.star.table.XCellRange object
            basic = CreateScriptService('basic')
            calc = CreateScriptService('Calc', basic.ThisComponent)
            menu = calc.ContextMenus('cell')
            menu.RemoveAllItems()
            in_column = ( len(calc.Intersect("Sheet1.$C:$C", XRange.AbsoluteName)) > 0 )
            if in_column:
                menu.AddItem('A', script = 'vnd.sun.star.script:Module1.py$EnterA?language=Python&location=document")
                # ...
            menu.Activate(in_column)
    
ໄອຄອນ ຄຳເຕືອນ

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


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

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