Méthode Folder.SetCustomIcon (Outlook)
Définit une icône personnalisée spécifiée par Picture pour le dossier.
Syntaxe
expression. SetCustomIcon(Picture)
Expression Variable qui représente un objet Folder .
Parameters
Nom | Requis/Facultatif | Type de données | Description |
---|---|---|---|
Picture | Requis | IPictureDisp | Spécifie l’icône personnalisée du dossier. |
Remarques
L’objet IPictureDisp spécifié par Picture doit avoir la propriété Type égale à PICTYPE_ICON ou à PICTYPE_BITMAP. L’icône ou la ressource bitmap peut avoir une taille maximale de 32 x 32. Les icônes 16 x 16 ou 24 x 24 sont également prises en charge, et Microsoft Outlook peut effectuer un scale-up d’une icône 16 x 16 si Outlook s’exécute en mode points par pouce (PPP) élevé. Les icônes d’autres tailles conduisent SetCustomIcon à renvoyer une erreur.
Vous pouvez définir une icône personnalisée pour un dossier de recherche et pour tous les dossiers qui ne représentent pas un dossier par défaut ou spécial. Si vous essayez de définir une icône personnalisée pour un dossier qui appartient à l’un des groupes de dossiers suivants, SetCustomIcon retourne une erreur :
- Dossiers par défaut (répertoriés par l’énumération OlDefaultFolders )
- Dossiers spéciaux (répertoriés par l’énumération OlSpecialFolders )
- Dossiers publics Exchange
- Dossier racine d’une boîte aux lettres Exchange
- Dossiers cachés
Vous ne pouvez appeler SetCustomIcon qu’à partir du code qui s’exécute intra-processus comme Outlook. Un objet IPictureDisp ne peut pas être marshalé à travers les frontières du processus. Si vous tentez d’appeler SetCustomIcon à partir du code extra-processus, une exception est levée.
L’icône de dossier personnalisée que cette méthode fournit n’existe plus une fois terminée la session Outlook en cours. Par conséquent, les compléments doivent définir cette icône à chaque démarrage d’Outlook.
L’icône de dossier personnalisée n’apparaît pas dans les autres clients Exchange tels qu’Outlook Web Access, ni lorsqu’Outlook s’exécute sur un appareil Windows Mobile.
Exemple
Le code managé suivant est écrit dans C#. Pour exécuter un exemple de code managé .NET Framework qui doit appeler un modèle COM (Component Object Model), vous devez utiliser un assembly d’interopérabilité qui définit et mappe des interfaces managées avec des objets COM dans la bibliothèque de types de modèle objet. Pour Outlook, vous pouvez utiliser Visual Studio et l’assembly d’interopérabilité de base (PIA) d’Outlook. Avant d’exécuter des exemples de code managé pour Outlook 2013, assurez-vous que vous avez installé le PIA d’Outlook 2013 et que vous avez ajouté une référence au composant Bibliothèque d’objets Microsoft Outlook 15.0 dans Visual Studio. Vous devez utiliser le code suivant dans la ThisAddIn
classe d’un complément Outlook (à l’aide des Outils de développement Office pour Visual Studio). L'objet Application dans le code doit être un objet Application Outlook approuvé fourni par ThisAddIn.Globals
. Pour plus d’informations sur l’utilisation de l’assembly PIA Outlook pour développer des solutions Outlook managées, consultez bienvenue dans la référence de l’assembly d’interopérabilité principal Outlook sur MSDN.
Le fragment de code suivant écrit en C# définit les icônes des dossiers qui apparaissent dans le module Solutions. Le fragment de code dépend de la PictureDispConverter
classe qui est également illustrée ci-dessous.
//Get the icons for the solution
stdole.StdPicture rootPict =
PictureDispConverter.ToIPictureDisp(
Properties.Resources.BRIDGE)
as stdole.StdPicture;
stdole.StdPicture calPict =
PictureDispConverter.ToIPictureDisp(
Properties.Resources.umbrella)
as stdole.StdPicture;
stdole.StdPicture contactsPict =
PictureDispConverter.ToIPictureDisp(
Properties.Resources.group)
as stdole.StdPicture;
stdole.StdPicture tasksPict =
PictureDispConverter.ToIPictureDisp(
Properties.Resources.SUN)
as stdole.StdPicture;
//Set the icons for solution folders
solutionRoot.SetCustomIcon(rootPict);
solutionCalendar.SetCustomIcon(calPict);
solutionContacts.SetCustomIcon(contactsPict);
solutionTasks.SetCustomIcon(tasksPict);
Voici la définition de la PictureDispConverter
classe .
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Runtime.InteropServices;
public static class PictureDispConverter
{
//IPictureDisp GUID.
public static Guid iPictureDispGuid = typeof(stdole.IPictureDisp).GUID;
// Converts an Icon into an IPictureDisp.
public static stdole.IPictureDisp ToIPictureDisp(Icon icon)
{
PICTDESC.Icon pictIcon = new PICTDESC.Icon(icon);
return PictureDispConverter.OleCreatePictureIndirect(pictIcon, ref iPictureDispGuid, true);
}
// Converts an image into an IPictureDisp.
public static stdole.IPictureDisp ToIPictureDisp(Image image)
{
Bitmap bitmap = (image is Bitmap) ? (Bitmap)image : new Bitmap(image);
PICTDESC.Bitmap pictBit = new PICTDESC.Bitmap(bitmap);
return PictureDispConverter.OleCreatePictureIndirect(pictBit, ref iPictureDispGuid, true);
}
[DllImport("OleAut32.dll", EntryPoint = "OleCreatePictureIndirect", ExactSpelling = true,
PreserveSig = false)]
private static extern stdole.IPictureDisp OleCreatePictureIndirect(
[MarshalAs(UnmanagedType.AsAny)] object picdesc, ref Guid iid, bool fOwn);
private readonly static HandleCollector handleCollector =
new HandleCollector("Icon handles", 1000);
// WINFORMS COMMENT:
// PICTDESC is a union in native, so we'll just
// define different ones for the different types
// the "unused" fields are there to make it the right
// size, since the struct in native is as big as the biggest
// union.
private static class PICTDESC
{
//Picture Types
public const short PICTYPE_UNINITIALIZED = -1;
public const short PICTYPE_NONE = 0;
public const short PICTYPE_BITMAP = 1;
public const short PICTYPE_METAFILE = 2;
public const short PICTYPE_ICON = 3;
public const short PICTYPE_ENHMETAFILE = 4;
[StructLayout(LayoutKind.Sequential)]
public class Icon
{
internal int cbSizeOfStruct = Marshal.SizeOf(typeof(PICTDESC.Icon));
internal int picType = PICTDESC.PICTYPE_ICON;
internal IntPtr hicon = IntPtr.Zero;
internal int unused1 = 0;
internal int unused2 = 0;
internal Icon(System.Drawing.Icon icon)
{
this.hicon = icon.ToBitmap().GetHicon();
}
}
[StructLayout(LayoutKind.Sequential)]
public class Bitmap
{
internal int cbSizeOfStruct = Marshal.SizeOf(typeof(PICTDESC.Bitmap));
internal int picType = PICTDESC.PICTYPE_BITMAP;
internal IntPtr hbitmap = IntPtr.Zero;
internal IntPtr hpal = IntPtr.Zero;
internal int unused = 0;
internal Bitmap(System.Drawing.Bitmap bitmap)
{
this.hbitmap = bitmap.GetHbitmap();
}
}
}
}
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.