Método Folder.SetCustomIcon (Outlook)

Configura un icono personalizado que es especificado por Picture para la carpeta.

Sintaxis

expresión. SetCustomIcon(Picture)

Expresión Variable que representa un objeto Folder .

Parameters

Nombre Obligatorio/opcional Tipo de datos Descripción
Picture Obligatorio IPictureDisp Especifica el icono personalizado para la carpeta.

Comentarios

El objeto IPictureDisp especificado por Picture debe tener su propiedad Type igual a PICTYPE_ICON o PICTYPE_BITMAP. El recurso de icono o mapa de bits puede tener un tamaño máximo de 32 x 32. También se admiten los iconos de 16 x 16 o 24 x 24 y Microsoft Outlook puede incrementar la escalabilidad vertical un icono de 16 x 16 si Outlook se está ejecutando en modo alta puntos por pulgada (PPP). Iconos de otros tamaños provocar SetCustomIcon devolver un error.

Puede establecer un icono personalizado para una carpeta de búsqueda y para todas las carpetas que no representan una carpeta predeterminada o especial. Si se intenta establecer un icono personalizado para una carpeta que pertenece a uno de los siguientes grupos de carpetas, SetCustomIcon devolverá un error:

  • Carpetas predeterminadas (tal como aparecen en la enumeración OlDefaultFolders )
  • Carpetas especiales (tal como aparecen en la enumeración OlSpecialFolders )
  • Carpetas públicas de Exchange
  • Carpeta raíz para cualquier buzón de correo de Exchange
  • Carpetas ocultas

SetCustomIcon sólo se puede llamar desde el código que se ejecuta en proceso como Outlook. Un objeto IPictureDisp no se puede ordenar a través de límites de proceso. Si intenta llamar a SetCustomIcon desde código fuera de proceso, se producirá una excepción.

El icono de carpeta personalizada que proporciona este método no persiste más allá de la sesión de Outlook que se está ejecutando. Por lo tanto, los complementos deben configurar el icono de la carpeta personalizada cada vez que arranca Outlook.

El icono de carpeta personalizada no aparece en otros clientes de Exchange, como Outlook Web Access, ni en Outlook que se ejecuta en un dispositivo con Windows Mobile.

Ejemplo:

El siguiente ejemplo de código administrado está escrito en C#. Para ejecutar un ejemplo de código administrado de .NET Framework que necesita llamar un modelo de objetos componentes (COM), debe utilizar un ensamblado de interoperabilidad que defina y asigne interfaces administradas a los objetos COM de la biblioteca de tipos de modelos de objetos. Para Outlook, puede utilizar Visual Studio y el ensamblado de interoperabilidad primario (PIA) de Outlook. Antes de ejecutar ejemplos de código administrado para Outlook 2013, compruebe que tiene el PIA de Outlook 2013 instalado y que ha añadido una referencia al componente biblioteca de objetos de Microsoft Outlook 15.0 en Visual Studio. Debe usar el código siguiente en la ThisAddIn clase de un complemento de Outlook (con Office Developer Tools para Visual Studio). El objeto Application del código debe ser un objeto Application de Outlook de confianza proporcionado por ThisAddIn.Globals. Si desea más información sobre el uso del PIA de Outlook para desarrollar soluciones de Outlook administradas, consulte Outlook 2013 Primary Interop Assembly Reference en MSDN.

El siguiente fragmento de código en C# configura los iconos de carpetas que aparecen en el módulo Soluciones. El fragmento de código depende de la clase PictureDispConverter que también se muestra a continuación.

//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);

A continuación se muestra la definición de la PictureDispConverter clase .

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(); 
 } 
 } 
 } 
} 

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.