L'Icona su toolbar utente non appare

Creare una macro - Scrivere uno script - Usare le API
Rispondi
marinoernestoch
Messaggi: 25
Iscritto il: sabato 17 agosto 2024, 19:02

L'Icona su toolbar utente non appare

Messaggio da marinoernestoch »

Buon giorno.
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
In OpenOffice l'icona appare in luogo dell'etichetta, mentre in LibreOffice no.
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
L'icona (il dischetto), come si vede dalle immagini, è abbinato al comando.
Immagino che in LibreOffice debba fare qualcosa, ma non ho capito cosa.
Ringrazio in anticipo chi vorrà aiutarmi.
Con Calc
Con Calc
NoIcona_inBarra.JPG (20.99 KiB) Visto 167 volte
Con Write
Con Write
NoIcona_inBarra2.JPG (13.82 KiB) Visto 167 volte
OpenOffice 4.1.15; LibreOffice 24.2.5.2; windows 10.