Makros per Kontextmenü ausführen

HowTos, komplexe Anleitungen und nützliche Dokumente

Moderator: Moderatoren

Forumsregeln
Hier bitte komplexere Anleitungen allgemeinem Interesses posten, sowie wichtige Dokumente zum Download.
Bitte hier (möglichst) keine Diskussionen führen. Für Fragen und Hinweise ein neues Thema im entsprechenden Unterforum eröffnen.
Antworten
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Makros per Kontextmenü ausführen

Beitrag 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) 18286 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
Dateianhänge
rot_gelb_grün_Contextmenue.ods
(8.56 KiB) 1153-mal heruntergeladen
Antworten