Seite 1 von 1

Makros per Kontextmenü ausführen

Verfasst: Fr, 22.03.2013 07:11
von F3K Total
In angehängtem Beispiedokument findet man folgende Makros:

Code: Alles auswählen

sub registerContextMenuInterceptor
    oController = ThisComponent.CurrentController
    oContextMenuInterceptor = CreateUnoListener("OOO_", "com.sun.star.ui.XContextMenuInterceptor")
    oController.registerContextMenuInterceptor(oContextMenuInterceptor)	
end sub

function OOO_notifyContextMenuExecute(oContextMenuExecuteEvent as co.sun.star.ui.ContextMenuExecuteEvent) as variant
    oActionTriggerContainer = oContextMenuExecuteEvent.ActionTriggerContainer
    
    oMenuItem = oActionTriggerContainer.createInstance("com.sun.star.ui.ActionTrigger")
    oActionTriggerContainer.insertByIndex(0, oMenuItem)
    oMenuItem = oActionTriggerContainer.getByIndex(0)
    oMenuItem.setPropertyValue("Text", "rot")
    oMenuItem.setPropertyValue("CommandURL", "vnd.sun.star.script:Standard.Einfaerben.S_Set_red?language=Basic&location=document") 
    oActionTriggerContainer.replaceByIndex(0, oMenuItem)
    
    oMenuItem = oActionTriggerContainer.createInstance("com.sun.star.ui.ActionTrigger")
    oActionTriggerContainer.insertByIndex(1, oMenuItem)
    oMenuItem = oActionTriggerContainer.getByIndex(1)
    oMenuItem.setPropertyValue("Text", "gelb")
    oMenuItem.setPropertyValue("CommandURL", "vnd.sun.star.script:Standard.Einfaerben.S_Set_yellow?language=Basic&location=document") 
    oActionTriggerContainer.replaceByIndex(1, oMenuItem)

    oMenuItem = oActionTriggerContainer.createInstance("com.sun.star.ui.ActionTrigger")
    oActionTriggerContainer.insertByIndex(2, oMenuItem)
    oMenuItem = oActionTriggerContainer.getByIndex(2)
    oMenuItem.setPropertyValue("Text", "grün")
    oMenuItem.setPropertyValue("CommandURL", "vnd.sun.star.script:Standard.Einfaerben.S_Set_green?language=Basic&location=document") 
    oActionTriggerContainer.replaceByIndex(2, oMenuItem)

    OOO_notifyContextMenuExecute = com.sun.star.ui.ContextMenuInterceptorAction.EXECUTE_MODIFIED
end function

sub S_Set_green
    osel = thiscomponent.currentselection
    osel.cellbackcolor = 32768'grün
end sub

sub S_Set_yellow
    osel = thiscomponent.currentselection
    osel.cellbackcolor = 16776960'gelb
end sub

sub S_Set_red
    osel = thiscomponent.currentselection
    osel.cellbackcolor = 16711680'rot
end sub
Diese erzeugen ein Kontextmenü mit drei Einträgen:
rgb.png
rgb.png (5.33 KiB) 18344 mal betrachtet
Das Makro

Code: Alles auswählen

registerContextMenuInterceptor
muss einmalig ausgeführt werden (Extras/Anpassen/Ereignisse), damit das Kontextmenü beim Aufruf um die drei Menüpunkte rot, gelb, grün erweitert wird. Für jedes mit dem Kontextmenü aufzurufende Makro, gibt es in der Function

Code: Alles auswählen

OOO_notifyContextMenuExecute
einen Anweisungsblock. Hier den Index je Eintrag hochzählen, den im Kontextmenü anzuzeigenden Text eintragen und den Pfad zur aufzurufenden Routine.
oMenuItem = oActionTriggerContainer.createInstance("com.sun.star.ui.ActionTrigger")
oActionTriggerContainer.insertByIndex(0, oMenuItem)
oMenuItem = oActionTriggerContainer.getByIndex(0)
oMenuItem.setPropertyValue("Text", "rot")
oMenuItem.setPropertyValue("CommandURL", "vnd.sun.star.script:Standard.Einfaerben.S_Set_red?language=Basic&location=document")
oActionTriggerContainer.replaceByIndex(0, oMenuItem)
Gruß R