Sempre continuando ad esplorare le possibilità di libreoffice, ho inserito nella barra già tratta nell'argomento:
viewtopic.php?t=12613
(tra l'altro sono in attesa di avere suggerimenti sul fatto che al secondo giro la barra non viene generata)
il riferimento ad una icona;
ecco la sub completa:
Codice: Seleziona tutto
sub CreaBarra_Di_Questo_Attivo_conIcoma()
'scaricato da 'https://forum.openoffice.org/it/forum/viewtopic.php?f=28&p=13993#p13993
' titolo Toolbar da Macro, queste sconosciute
'====================================================
' usando thiscomponent.UIConfigurationManager o in alternativa
' alternativa xyUNO = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
' alternativa oConfManager = xyUNO.getUIConfigurationManager("com.sun.star.sheet.SpreadsheetDocument")
' https://www.openoffice.org/api/docs/common/ref/com/sun/star/ui/XUIConfigurationManager.html
'====================================================
dim sURLToolbar As string, sNameToolbar as string
dim oToolbar as object '
dim oConfManager as object
dim I as integer '
Dim sMyToolbarCmdId As String
Dim nomeimmagine As string, immaginenome As String
dim aToolbarItem(3) as new com.sun.star.beans.PropertyValue
Dim oToolbarSettings
Dim oImageMgr
sMyToolbarCmdId = "///Standard.SubProva.Prima_sub()"
sNameToolbar = "PPRROOVVAA_QuestoConIcona" ' NOME DA ASSOCIARE ALLA TOOLBAR
sURLToolbar = "private:resource/toolbar/custom_PPRROOVVAA_QuestoConIcona" ' RESOURCE URL DELLA TOOLBAR
' nomeimmagine = environ("USERPROFILE") & "\Downloads\sc_save.png"
nomeimmagine = "private:graphicrepository/cmd/sc_save.png"
ImmagineNome = ConvertToURL(nomeimmagine)
oImageMgr = AcquisisciGestoreImmagini()
' Call fremoveCommandIcon(0, sMyToolbarCmdId)
if not oImageMgr.hasImage( 0, sMyToolbarCmdId ) Then 'CommandURL a command URL that should be checked for an associated image
Dim oImage, oImageCmds(0),oImages(0)
oImage = fGetImageFromURL( immaginenome)
if not isNull( oImage ) then
REM *** Insert new image into the Calc image manager
oImageCmds(0) = sMyToolbarCmdId
oImages(0) = oImage
oImageMgr.insertImages( 0, oImageCmds(), oImages() )
end if
End If
dopoimmagine:
'oConfManager = thiscomponent.UIConfigurationManager ' ACQ. User Interface CONFIGURATION MANAGER x questo documento
dim xyUNO: xyUNO = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")
Set oConfManager = xyUNO.getUIConfigurationManager("com.sun.star.sheet.SpreadsheetDocument")
If (oConfManager.hasSettings(sURLToolbar)) Then
oConfManager.removeSettings(sURLToolbar)
End If
oToolbarSettings = oConfManager.createSettings() ' la struttura della barra
oToolbarSettings.UIName = sNameToolbar ' Set a title for our new custom toolbar
'---------------------------------------------'
aToolbarItem(0).Name = "CommandURL"
aToolbarItem(0).Value = sMyToolbarCmdId ' "macro:///Standard.SubProva.Prima_sub()"
aToolbarItem(1).Name = "Label"
aToolbarItem(1).Value = "icona" ' Esegui 1"
aToolbarItem(2).Name = "Type" '
aToolbarItem(2).Value = 0 ' Valore per Type (Con 0 si vede la scritta...)
aToolbarItem(3).Name = "Visible" ' ARGOMENTO PER BOTTONE VISIBILE O NASCOSTO
aToolbarItem(3).Value = true ' true per VISIBILE, false per NASCOSTO
oToolbarSettings.insertByIndex(0, aToolbarItem())
oConfManager.insertSettings(sURLToolbar , oToolbarSettings)
ThisComponent.CurrentController.Frame.LayoutManager.showElement( sURLToolbar)
oConfManager.store()
End Sub
Function AcquisisciGestoreImmagini()
' ex getImageManager()
Dim oModuleMgr, oModuleCfgMgrSupplier, oModuleIdentifier, oModuleCfgMgr
oModuleMgr = createUnoService( "com.sun.star.frame.ModuleManager" )
oModuleCfgMgrSupplier = createUnoService( "com.sun.star.ui.ModuleUIConfigurationManagerSupplier" )
oModuleIdentifier = oModuleMgr.identify( ThisComponent )
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager( oModuleIdentifier )
AcquisisciGestoreImmagini = oModuleCfgMgr.getImageManager
End Function
Function fGetImageFromURL( URL as String ) as Variant
Dim oMediaProperties(0) As New com.sun.star.beans.PropertyValue
Dim sProvider$ : sProvider = "com.sun.star.graphic.GraphicProvider"
Dim oGraphicProvider
REM Create graphic provider instance to load images from files.
oGraphicProvider = createUnoService( sProvider )
REM Set URL property so graphic provider is able to load the image
oMediaProperties(0).Name = "URL"
oMediaProperties(0).Value = URL
REM Retrieve the com.sun.star.graphic.XGraphic instance
fGetImageFromURL = oGraphicProvider.queryGraphic( oMediaProperties() )
End Function
Le istruzioni allegate sono per una barra di Calc, ma ho provato anche con Write. Così come ho provato anche con una barra del documento . Sono tutte prove con esito negativo.
E ancora ho provato sia con immagine su disco che con immagine già incorporata in LibreOffice.
Codice: Seleziona tutto
nomeimmagine = environ("USERPROFILE") & "\Downloads\sc_save.png" 1° caso
nomeimmagine = "private:graphicrepository/cmd/sc_save.png" 2° caso
Immagino che in LibreOffice debba fare qualcosa, ma non ho capito cosa.
Ringrazio in anticipo chi vorrà aiutarmi.