مشاركة عبر


كيفية القيام بما يلي: إضافة أيقونات مخصصة لشريط الأدوات و عناصر القائمة

ينطبق على

تنطبق المعلومات الموجودة في هذا الموضوع فقط على أنواع المشاريع وإصدارات Microsoft Office التالية: لمزيد من المعلومات، راجع الميزات المتوفرة بواسطة تطبيقات Office و نوع المشروع.

نوع المشروع

  • مشروعات على مستوى التطبيق

إصدار Microsoft Office

  • Outlook 2007

  • InfoPath 2007

  • Project 2007

  • Visio 2007

يضيف هذا المثال أيقونة إلى زر شريط الأوامر على القائمة المخصصة في Microsoft Office Outlook. الأيقونة مضمنة في موارد المشروع. للحصول على مزيد من المعلومات حول موارد المشروع، راجع Adding and Editing Resources (Visual C#) و كيفية القيام بما يلي: إضافة أو إزالة الموارد.

على الرغم من أن هذا المثال مخصص لـ Outlook, يمكن استخدام الجزء من هذه التعليمة البرمجية الذي يضيف أيقونة إلى زر شريط الأوامر، لإضافة رموز إلى زر شريط الأوامر في أي من التطبيقات المسرودة في الجدول أعلاه.

لإضافة أيقونات مخصصة

  1. أضف التعليمات البرمجية إلى ملف ThisAddIn.vb أو ThisAddIn.cs الخاص بمشروع Outlook لإنشاء عناصر التحكم CommandBarPopup و CommandBarButton التي تمثل القائمة المخصصة و أوامر القائمة . تتحقق هذه التعليمة البرمجية مما إذا كانت القائمة موجودة . إذا كانت موجودة ، تقوم التعليمة البرمجية بإزالة القائمة . ثم تضيف قائمة جديدة .

    Private MenuBar As Office.CommandBar
    Private newMenuBar As Office.CommandBarPopup
    Private ButtonOne As Office.CommandBarButton
    Private menuTag As String = "AUniqueName"
    
    
    Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
        RemoveMenubar()
        AddMenuBar()
    End Sub
    
    Private Sub AddMenuBar()
        Try
            MenuBar = Me.Application.ActiveExplorer().CommandBars.ActiveMenuBar
            newMenuBar = MenuBar.Controls.Add( _
                Office.MsoControlType.msoControlPopup, _
                Temporary:=False)
            If newMenuBar IsNot Nothing Then
                newMenuBar.Caption = "See New Icon"
                newMenuBar.Tag = menuTag
                ButtonOne = newMenuBar.Controls.Add( _
                    Office.MsoControlType.msoControlButton, _
                    Before:=1, Temporary:=False)
                With ButtonOne
                    .Style = Office.MsoButtonStyle _
                    .msoButtonIconAndCaption
                    .Caption = "New Icon"
                    .FaceId = 65
                    .Tag = "c123"
                    .Picture = getImage()
                End With
                newMenuBar.Visible = True
            End If
        Catch Ex As Exception
            MsgBox(Ex.Message)
        End Try
    End Sub
    
    Private Sub RemoveMenubar()
        Try
            ' If the menu already exists, remove it.
            Dim foundMenu As Office.CommandBarPopup = _
                Me.Application.ActiveExplorer().CommandBars.ActiveMenuBar. _
                FindControl(Office.MsoControlType.msoControlPopup, _
                System.Type.Missing, menuTag, True, True)
            If foundMenu IsNot Nothing Then
                foundMenu.Delete(True)
            End If
        Catch Ex As Exception
            MsgBox(Ex.Message)
        End Try
    End Sub
    
    
    private Office.CommandBar menuBar;
    private Office.CommandBarPopup newMenuBar;
    private Office.CommandBarButton buttonOne;
    private string menuTag = "AUniqueTag";
    
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        RemoveMenubar();
        AddMenuBar();
    }
    
    private void AddMenuBar()
    {
        try
        {
            menuBar = this.Application.ActiveExplorer().CommandBars.ActiveMenuBar;
            newMenuBar = (Office.CommandBarPopup)menuBar.Controls.Add(
                Office.MsoControlType.msoControlPopup, missing,
                missing, missing, false);
            if (newMenuBar != null)
            {
                newMenuBar.Caption = "See New Icon";
                newMenuBar.Tag = menuTag;
                buttonOne = (Office.CommandBarButton)
                    newMenuBar.Controls.
                Add(Office.MsoControlType.msoControlButton, System.
                    Type.Missing, System.Type.Missing, 1, true);
                buttonOne.Style = Office.MsoButtonStyle.
                    msoButtonIconAndCaption;
                buttonOne.Caption = "New Icon";
                buttonOne.FaceId = 65;
                buttonOne.Tag = "c123";
                buttonOne.Picture = getImage();
                newMenuBar.Visible = true;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    
    private void RemoveMenubar()
    {
        // If the menu already exists, remove it.
        try
        {
            Office.CommandBarPopup foundMenu = (Office.CommandBarPopup)
                this.Application.ActiveExplorer().CommandBars.ActiveMenuBar.
                FindControl(Office.MsoControlType.msoControlPopup,
                System.Type.Missing, menuTag, true, true);
            if (foundMenu != null)
            {
                foundMenu.Delete(true);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    
  2. قم بإنشاء فئة جديدة باسم ConvertImage. تستخدم هذه الفئة System.Forms.Axhost لتحويل ملف Image إلى نوع صورة يمكن تطبيقها على عنصر القائمة.

    <Global.System.Security.Permissions.PermissionSetAttribute _
     (Global.System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Public Class ConvertImage
        Inherits System.Windows.Forms.AxHost
        Public Sub New()
            MyBase.New("59EE46BA-677D-4d20-BF10-8D8067CB8B32")
        End Sub
    
        Public Shared Function Convert(ByVal Image _
            As System.Drawing.Image) As stdole.IPictureDisp
            Convert = GetIPictureFromPicture(Image)
        End Function
    End Class
    
    sealed public class ConvertImage : System.Windows.Forms.AxHost
    {
        private ConvertImage()
            : base(null)
        {
        }
    
        public static stdole.IPictureDisp Convert
            (System.Drawing.Image image)
        {
            return (stdole.IPictureDisp)System.
                Windows.Forms.AxHost
                .GetIPictureDispFromPicture(image);
        }
    }
    
  3. قم بإضافة أسلوب لتحويل ملف الأيقونة إلى ملف Image عن طريق إضافته إلى ImageList. ترسل هذه التعليمة البرمجية ملف Image إلى أسلوب ConvertImage.Convert الذي قمت بإنشائه ثم تقوم بإرجاع الملف إلى المستدعِى.

    Private Function getImage() As stdole.IPictureDisp
        Dim tempImage As stdole.IPictureDisp = Nothing
        Try
            Dim newIcon As Icon = My.Resources.Icon1
            Dim newImageList As New ImageList
            newImageList.Images.Add(newIcon)
            tempImage = ConvertImage.Convert(newImageList.Images(0))
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return tempImage
    End Function
    
    private stdole.IPictureDisp getImage()
    {
        stdole.IPictureDisp tempImage = null;
        try
        {
            System.Drawing.Icon newIcon =
                Properties.Resources.Icon1;
    
            ImageList newImageList = new ImageList();
            newImageList.Images.Add(newIcon);
            tempImage = ConvertImage.Convert(newImageList.Images[0]);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return tempImage;
    }
    

التحويل البرمجي للتعليمات البرمجية

يتطلب هذا المثال:

  • أيقونة باسم Icon1 في موارد المشروع.

راجع أيضًا:

المهام

كيفية القيام بما يلي: إنشاء أشرطة أدوات Office

كيفية القيام بما يلي: اضافة القوائم المخصصة و عناصر القائمة إلى Outlook

كيفية القيام بما يلي: إضافة أو إزالة الموارد

كيفية القيام بما يلي: تحديد رمز التطبيق (Visual Basic ، C#)

موارد أخرى

نظرة عامة حول نموذج كائن Outlook

إدارة الموارد التطبيق