Seite 1 von 1

Neue Menüs gehen nicht in Vorlagen

Verfasst: Do, 12.06.2008 13:11
von ykcim
Mit dem folgenden Code füge ich ein neues Menu mit mehreren Enträgen in die Menuleiste der OpenOffice-Anwendungen ein.

Code: Alles auswählen


const aDataRootFolder="macro:///meineMakros."

Sub InsertFavoritesMenu
    ImplInsertFavoritesMenu( "com.sun.star.frame.StartModule" )
    ImplInsertFavoritesMenu( "com.sun.star.text.TextDocument" )
    ImplInsertFavoritesMenu( "com.sun.star.sheet.SpreadsheetDocument" )
    ImplInsertFavoritesMenu( "com.sun.star.drawing.DrawingDocument" )
    ImplInsertFavoritesMenu( "com.sun.star.presentation.PresentationDocument" )
 End Sub 
 
 Sub ImplInsertFavoritesMenu( ModuleName as string )
    sMenuBar = "private:resource/menubar/menubar"
    sMyPopupMenuCmdId = "vnd.openoffice.org:ooOffice"
 
    oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
    oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager( ModuleName )
    oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true )
    bHasAlreadyPopupMenu = false
    nCount = oMenuBarSettings.getCount()
    for i = 0 to nCount-1
        oPopupMenu() = oMenuBarSettings.getByIndex( i )
        nPopupMenuCount = ubound(oPopupMenu())
        for j = 0 to nPopupMenuCount
            if oPopupMenu(j).Name = "CommandURL" then
                if oPopupMenu(j).Value = sMyPopupMenuCmdId then
                    bHasAlreadyPopupMenu = true
                end if
            endif
        next j
       oModuleCfgMgr.store()
    next i
 
    if not bHasAlreadyPopupMenu then
        sString = "ooOffice"
        oPopupMenu = ImplCreatePopupMenu( sMyPopupMenuCmdId, sString, oMenuBarSettings )
        oPopupMenuContainer = oPopupMenu(3).Value
 
       
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"Main.StartAdrDlg", "Adressenverwaltung" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"Main.CallBriefDlg", "Neues Dokument" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"dokverwalt.CallDocDlgAllDocs", "Dokumentenverwaltung" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"speichern.SpeichernInDB", "Speichern in DB" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"speichern.SpeichernInOrdner", "Speichern in Ordner" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"Setup.StartSetup", "Einstellungen" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )

        oMenuItem = ImplCreateMenuItem( aDataRootFolder+"Main.StartMain", "Startmenu" )
        oPopupMenuContainer.insertByIndex( oPopupMenuContainer.Count(), oMenuItem )
 
        oMenuBarSettings.insertByIndex( nCount, oPopupMenu )
        oModuleCfgMgr.replaceSettings( sMenuBar, oMenuBarSettings )
        oModuleCfgMgr.store()
    end if
 End Sub
 
 Function ImplCreatePopupMenu( CommandId, Label, Factory ) as Variant
    Dim aPopupMenu(3) as new com.sun.star.beans.PropertyValue
    aPopupMenu(0).Name = "CommandURL"
    aPopupMenu(0).Value = CommandId
    aPopupMenu(1).Name = "Label"
    aPopupMenu(1).Value = Label
    aPopupMenu(2).Name = "Type"
    aPopupMenu(2).Value = 0
    aPopupMenu(3).Name = "ItemDescriptorContainer"
    aPopupMenu(3).Value = Factory.createInstanceWithContext( GetDefaultContext() )
    ImplCreatePopupMenu = aPopupMenu()
 End Function
 
 Function ImplCreateMenuItem( Command as String, Label as String ) as Variant
    Dim aMenuItem(2) as new com.sun.star.beans.PropertyValue
    aMenuItem(0).Name = "CommandURL"
    aMenuItem(0).Value = Command
    aMenuItem(1).Name = "Label"
    aMenuItem(1).Value = Label
    aMenuItem(2).Name = "Type"
    aMenuItem(2).Value = 0
    ImplCreateMenuItem = aMenuItem()
 End Function
 
Das funktioniert auch gut.... Bis auf die Tatsache das die Menüs in neuen Dokumeten die auf einer Vorlage basieren nicht gehen. Wenn ich ein neues leeres Dokument erzeuge ( Datei -> Neu ) gehe die Makros über das Menü. Wenn ich ein neues Dokument aus einer Vorlage erstelle gehen die Makros nicht. Hat jemand ein Tipp woran das liegen könnte?


mfg
Michael

Re: Neue Menüs gehen nicht in Vorlagen

Verfasst: Do, 12.06.2008 13:40
von komma4
Kann ich nicht nachvollziehen...

Verwende den gleichen Code erfolgreich bei einem Testrechner (OOo 2.3.1/WinXP), auch bei neu aus Vorlagen erstellten Dokumenten.

Re: Neue Menüs gehen nicht in Vorlagen

Verfasst: Do, 12.06.2008 13:44
von ykcim
Hallo,

ich verwende 2.4.1. Werde jetzt aber mal in einer Testumgebung eine ältere Version installieren und es probieren.

mfg
Michael

Re: Neue Menüs gehen nicht in Vorlagen

Verfasst: Do, 12.06.2008 14:01
von ykcim
Testumgebung mit 2.4.....
Und siehe da alles geht wunderbar.
Ich bin es langsam leid. Jede neue Version hat neue Fehler.

mfg
Michael
Der darüber nachdenkt sich von OpenOffice zu verabschieden.

Re: Neue Menüs gehen nicht in Vorlagen

Verfasst: Do, 12.06.2008 14:36
von komma4
>Jede neue Version hat neue Fehler.


Ja.
Zum Glück: ich verdiene mein Geld damit. Ich kann Dir versichern, dass das mit JEDER Software so ist.

Solange es "nur" solche "Komfortfunktionen" betrifft ist das nur lästig, aber noch tragbar.

Re: Neue Menüs gehen nicht in Vorlagen

Verfasst: Fr, 13.06.2008 12:04
von ykcim
Nein es ist auf Dauer nicht tragbar.
Es macht keinen Sinn dauernd neue Versionen herauszubringen, die dann neue Fehler in Funktionen haben, die bereits fehlerfrei waren. Es ist sehr bedauerlich, aber OpenOffice ist bei weitem nicht so gut wie manche gerne tun.

mfg
Michael

Re: Neue Menüs gehen nicht in Vorlagen

Verfasst: Fr, 13.06.2008 12:15
von komma4
'Tschuldige, ich habe gestern abend nicht mehr probiert, ob der Code mit der 2.4.1 noch funktioniert. Das nehme ich mir nun für's Wochenende vor.


Du -und alle anderen- sind eingeladen an den Regressionstests des Projekts teilzunehmen. Weil: Fehler findet man nur, wenn man testet.


Und dass sich bei Softwareänderungen (von so grossen Paketen) Änderungen "einschleichen", ist statistisch erwiesen. Harry Sneed sprach mal von einer "zwei-drittel Wahrscheinlichkeit", dass eine Codeänderung einen Fehler implantiert. Selbst sogenannte "stabile" Funktionalitäten sind manchmal betroffen.


Nichts gegen Dich, aber auch erwiesen: viele der Fehler sitzen vor dem Bildschirm. Es wird dann aber gleich 'geschrieen', dass die Software defekt sei usw. Und solche Meldungen sind eben "lauter", als die Zufriedenheit von vielen Anwendern, die keine Probleme haben...


Du kannst es gerne mit anderer Software für den Officeeinsatz versuchen. Ob Du damit glücklicher wirst ? Viel Erfolg!

Re: Neue Menüs gehen nicht in Vorlagen

Verfasst: Fr, 13.06.2008 18:10
von komma4
Michael,

sorry - der Code funktioniert hier auch mit der 2.4.1 Suse 10.1, update mittels RPM.

Re: Neue Menüs gehen nicht in Vorlagen

Verfasst: Sa, 14.06.2008 10:43
von ykcim
Tja, ich habe es jetzt auf fünf verschiedenen Rechner probiert mit dem Ergebnis 3:2. Auf dreien geht es auf zweien geht es nicht. Auf meinen Entwicklungsrechner habe ich OpenOffice komplett gelöscht (inkl. des Userpfads) und es geht nach einer neu Installation immer noch nicht. Mit StarOffice 8 und neuestem Patch geht es auf diesem PC.

Ich finde das eine tolles Ergebnis. Jetzt kann ich eine, ich denke eine gute, Lösung zu Arbeit mit OpenOffice anbieten, muß aber den Leuten sagen: Sorry es tut mir leid aber es kann sein das es nicht richtig geht.

Michael