Assegnare immagini di formato diverso ad un comando del Ribbon
Oggi vorrei completare il post .NET Ribbon con il codice necessario per assegnare ad un comando del Ribbon immagini di vario formato: ico, jpg, bmp, gif, ecc.
Scaricate (se non l'avete già fatto
) l'applicazione allegata al post Assegnare immagini personalizzate ad un comando del Ribbon e, seguendo le istruzioni del post, predisponete tre comandi sul tab personalizzato, e tre file di risorsa per le rispettive immagini (io ho utilizzato un file .ico, un file .gif e un file .bmp)
1. Modificare il file Ribbon1.xlm
Il file Ribbon1.xml dovrebbe avere la seguente struttura:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">
<ribbon>
<tabs>
<tab id="SchedaPersonalizzata"
label ="Laura">
<group id="Immagini"
label="Immagini aziendali"
<toggleButton id="InserisciLogo01"
size="large"
label="Inserisci Logo Ufficiale"
screentip="Inserisce il logo ufficiale in corrispondenza del cursore"
onAction="OnToggleButton"
getImage ="GetMyImage" />
<toggleButton id="InserisciLogo02"
size="large"
label="Inserisci Logo per web"
screentip="Inserisce il logo web in corrispondenza del cursore"
onAction="OnToggleButton"
getImage ="GetMyImage" />
<toggleButton id="InserisciLogo03"
size="large"
label="Inserisci Logo interno"
screentip="Inserisce il logo per la documentazione interna in corrispondenza del cursore"
onAction="OnToggleButton"
getImage ="GetMyImage" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
2. Modificare la funzione GetMyImage
Modificate la funzione GetMyImage in modo da passare l'immagine corrispondente ad ogni controllo del Ribbon:
public stdole.IPictureDisp GetMyImage(Office.IRibbonControl control)
{
stdole.IPictureDisp pictureDisp = null;
switch (control.Id)
{
case "InserisciLogo01":
pictureDisp =
ImageConverter.Convert(GetResourceBitmap("sqltut.ico"));
break;
case "InserisciLogo02":
pictureDisp =
ImageConverter.Convert(GetResourceBitmap("Logo.bmp"));
break;
case "InserisciLogo03":
pictureDisp =
ImageConverter.Convert(GetResourceBitmap("Diavoletto.gif"));
break;
}
return pictureDisp;
}
3. Modificare la funzione GetResourceBitmap
Modificate la funzione che restituisce l'immagine in modo che gestisca la tipologia di immagini.ico separatamente dalle altre:
public static System.Drawing.Bitmap GetResourceBitmap(string resourceName)
{
Assembly asm = Assembly.GetExecutingAssembly();
string[] resources = asm.GetManifestResourceNames();
System.Drawing.Bitmap image = null;
foreach (string resource in resources)
{
if (resource.EndsWith(resourceName))
{
System.IO.Stream stream =
asm.GetManifestResourceStream(resource);
if (stream == null)
{
break;
}
string extension =
System.IO.Path.GetExtension(resourceName).ToLower();
switch (extension)
{
case ".ico":
image = new System.Drawing.Icon(stream).ToBitmap();
break;
default:
image = new System.Drawing.Bitmap(stream);
image.MakeTransparent();
break;
}
stream.Close();
break;
}
}
return image;
}
4. Provare per credere
Lanciate l'applicazione e il risultato, con le mie immagini, è il seguente:
Trovate l'applicazione completa in allegato
Chiedo ancora perdono agli utenti di Visual Basic che rimando all'articolo in uscita alla fine del mese (
).
Ciao a tutti
Laura