von ykcim » Do, 12.06.2008 13:11
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
Mit dem folgenden Code füge ich ein neues Menu mit mehreren Enträgen in die Menuleiste der OpenOffice-Anwendungen ein.
[code]
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
[/code]
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