Share via


Método Folder.SetCustomIcon (Outlook)

Define um ícone personalizado que é especificado pelo Picture para a pasta.

Sintaxe

expressão. SetCustomIcon(Imagem)

Expressão Uma variável que representa um objeto Folder .

Parâmetros

Nome Obrigatório/Opcional Tipo de dados Descrição
Picture Obrigatório Ipicturedisp Especifica o ícone personalizado para a pasta.

Comentários

O objeto IPictureDisp especificado pela Imagem deve ter sua propriedade Type igual a PICTYPE_ICON ou PICTYPE_BITMAP. O recurso de ícone ou bitmap pode ter um tamanho máximo de 32 x 32. Os ícones são 16 x 16 ou 24 x 24 também são suportados e Microsoft Outlook pode dimensionar um ícone de 16 x 16 se o Outlook estiver sendo executado no modo de alta pontos por polegada (DPI). Ícones de outros tamanhos causam SetCustomIcon retornar um erro.

Você pode definir um ícone personalizado para uma pasta de pesquisa e para todas as pastas que não representam um padrão ou uma pasta especial. Se você tentar definir um ícone personalizado para uma pasta que pertence a um dos seguintes grupos de pastas, SetCustomIcon retornará um erro:

  • Pastas padrão (conforme listadas pela enumeração OlDefaultFolders )
  • Pastas especiais (conforme listadas pela enumeração OlSpecialFolders )
  • Pastas públicas do Exchange
  • Pasta raiz de qualquer caixa de correio do Exchange
  • Pastas ocultas

Você só pode chamar SetCustomIcon de código que é executado em processo como o Outlook. Um objeto IPictureDisp não pode ser enfileirado nos limites do processo. Se você tentar chamar SetCustomIcon do código de fora do processo, ocorrerá uma exceção.

O ícone personalizado de pasta fornecido por este método não persiste além da sessão do Outlook em execução. Portanto, os suplementos devem definir o ícone personalizado de pasta sempre que o Outlook for inicializado.

O ícone personalizado de pasta não aparece em outros clientes do Exchange, como o Outlook Web Access, nem no Outlook em execução em um dispositivo Windows Mobile.

Exemplo

The following managed code is written in C#. To run a .NET Framework managed code sample that needs to call into a Component Object Model (COM), you must use an interop assembly that defines and maps managed interfaces to the COM objects in the object model type library. For Outlook, you can use Visual Studio and the Outlook Primary Interop Assembly (PIA). Before you run managed code samples for Outlook 2013, ensure that you have installed the Outlook 2013 PIA and have added a reference to the Microsoft Outlook 15.0 Object Library component in Visual Studio. Você deve usar o código a ThisAddIn seguir na classe de um suplemento do Outlook (usando ferramentas de desenvolvedor do Office para Visual Studio). The Application object in the code must be a trusted Outlook Application object provided by ThisAddIn.Globals. For more information about using the Outlook PIA to develop managed Outlook solutions, see the Outlook 2013 Primary Interop Assembly Reference on MSDN.

O fragmento de código em C# a seguir define os ícones de pastas que aparecem no módulo Soluções. O fragmento de código depende da classe PictureDispConverter, também ilustrada abaixo.

//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 seguir está a definição da 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(); 
 } 
 } 
 } 
} 

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.