Folder.SetCustomIcon-Methode (Outlook)

Legt für den Ordner ein benutzerdefiniertes Symbol fest, das von Picture angegeben wird.

Syntax

Ausdruck. SetCustomIcon(Picture)

Ausdruck Eine Variable, die ein Folder-Objekt darstellt.

Parameter

Name Erforderlich/Optional Datentyp Beschreibung
Picture Erforderlich Ipicturedisp Gibt das benutzerdefinierte Symbol für den Ordner an.

HinwBemerkungeneise

Das von Picture angegebene IPictureDisp-Objekt muss über die Type-EigenschaftPICTYPE_ICON oder PICTYPE_BITMAP verfügen. Die Symbol oder Bitmap-Ressource kann eine maximale Größe von 32 x 32 haben. Symbole, die 16 x 16 oder 24 x 24 sind auch unterstützt werden, sowie Microsoft Outlook können vertikale Skalierung einer 16 x 16-Symbol, wenn Outlook im Modus für hohe Punkte pro Zoll (DPI) ausgeführt wird. Symbole aller anderen Größen verursachen SetCustomIcon einen Fehler zurückgegeben.

Sie können ein benutzerdefiniertes Symbol für einen Suchordner und für alle Ordner festlegen, die keinen Standardordner oder einen speziellen Ordner darstellen. Wenn Sie versuchen, ein benutzerdefiniertes Symbol für einen Ordner festzulegen, zu der eine der folgenden Gruppen von Ordnern gehört, gibt SetCustomIcon einen Fehler zurück:

  • Standardordner (wie in der OlDefaultFolders -Enumeration aufgelistet)
  • Ordner mit Sonderfunktion (wie in der OlSpecialFolders -Enumeration aufgelistet)
  • Öffentliche Exchange-Ordner
  • Stammordner beliebiger Exchange-Postfächer
  • Verborgene Ordner

Sie können nur SetCustomIcon aus Code aufgerufen wird, wird als Outlook prozessinternes Protokoll. Ein IPictureDisp -Objekt kann nicht über die Grenzen hinweg Prozess gemarshallt werden sollen. Wenn Sie versuchen, SetCustomIcon von Out-of-Process-Code aufrufen, wird eine Ausnahme ausgelöst.

Das benutzerdefinierte Ordnersymbol, das durch diese Methode bereitgestellt wird, bleibt nicht über die aktuelle Outlook-Sitzung hinaus bestehen. Add-Ins müssen das benutzerdefinierte Ordnersymbol daher bei jedem Starten von Outlook festlegen.

Das benutzerdefinierte Ordnersymbol wird nicht in anderen Exchange-Clients, wie etwa Outlook Web Access oder bei der Ausführung von Outlook auf Windows Mobile-Geräten angezeigt.

Beispiel

Der folgende verwaltete Code ist in C# geschrieben. Um ein verwaltetes Codebeispiel von .NET Framework auszuführen, das ein Component Object Model (COM) aufrufen muss, müssen Sie eine Interopassembly verwenden, die verwaltete Schnittstellen definiert und den COM-Objekten in der Object Model-Typbibliothek zuordnet. Für Outlook können Sie Visual Studio und die Outlook Primary Interop Assembly (PIA) verwenden. Stellen Sie sicher, dass Sie die Outlook 2013 PIA installiert und eine Referenz zur Microsoft Outlook 15.0-Objektbibliothekkomponente in Visual Studio hinzugefügt haben, bevor Sie verwaltete Codebeispiele für Outlook 2013 ausführen. Sie sollten den folgenden Code in der ThisAddIn Klasse eines Outlook-Add-Ins verwenden (mit Office Developer Tools für Visual Studio). Das Objekt der Anwendung im Code muss ein vertrauenswürdiges Outlook- Anwendungsobjekt sein, das von ThisAddIn.Globals bereitgestellt wird. Weitere Informationen zur Verwendung der Outlook-PIA zur Entwicklung verwalteter Outlook-Lösungen finden Sie auf MSDN unter Willkommen bei der Referenz zur primären Interopassembly von Outlook (PIA).

Das folgende Codefragment in C# legt die Symbole für Ordner fest, die im Modul Solutions vorkommen. Das Codefragment hängt von der PictureDispConverter-Klasse ab, die unten ebenfalls veranschaulicht wird.

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

Im Folgenden wird die Definition der PictureDispConverter -Klasse dargestellt.

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

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.