سؤال

أعرف كيفية وضع أيقونة في منطقة إعلام Windows (علبة النظام).

ما هي أفضل طريقة للحصول على أيقونة تحريك؟ هل يمكنك استخدام GIF متحركة، أو هل يجب أن تعتمد على توقيت؟

أنا أستخدم C # و WPF، لكن WinForms مقبولة أيضا.

هل كانت مفيدة؟

المحلول

بوثينابا باسو بوست الرسوم المتحركة والنص في صينية النظام باستخدام C # يوضح.

ينزل إلى:

  • صنع مجموعة من الرموز التي تمثل كل منها إطار رسوم متحركة.
  • تبديل الرموز في الدرج في أحداث المؤقت
  • إنشاء شريط نقطية. كل إطار هو 16x16 بكسل
  • استعمال systray.cs.

على سبيل المثال

enter image description here

private void button1_Click(object sender, System.EventArgs e)
{
    m_sysTray.StopAnimation();
    Bitmap bmp = new Bitmap("tick.bmp");
    // the color from the left bottom pixel will be made transparent
    bmp.MakeTransparent();
    m_sysTray.SetAnimationClip(bmp);
    m_sysTray.StartAnimation(150, 5);
}

SetAnimationClip يستخدم التعليمات البرمجية التالية لإنشاء إطار الرسوم المتحركة

public void SetAnimationClip (Bitmap bitmapStrip)
{
    m_animationIcons = new Icon[bitmapStrip.Width / 16];
    for (int i = 0; i < m_animationIcons.Length; i++)
    {
        Rectangle rect = new Rectangle(i*16, 0, 16, 16);
        Bitmap bmp = bitmapStrip.Clone(rect, bitmapStrip.PixelFormat);
        m_animationIcons[i] = Icon.FromHandle(bmp.GetHicon());
    }
}

لتحريك الإطار StartAnimation يبدأ تشغيل مؤقت وفي الموقت يتم تغيير الرموز لتحريك التسلسل بأكمله.

public void StartAnimation(int interval, int loopCount)
{
    if(m_animationIcons == null)
        throw new ApplicationException("Animation clip not set with    
                                        SetAnimationClip");

    m_loopCount = loopCount;
    m_timer.Interval = interval;
    m_timer.Start();
}

private void m_timer_Tick(object sender, EventArgs e)
{
    if(m_currIndex < m_animationIcons.Length)
    {
        m_notifyIcon.Icon = m_animationIcons[m_currIndex];
        m_currIndex++;
    }
    ....
}

باستخدام systray.

إنشاء وسلك القائمة الخاصة بك

ContextMenu m_menu = new ContextMenu();                                   
m_menu.MenuItems.Add(0, new MenuItem("Show",new
                     System.EventHandler(Show_Click)));

احصل على أيقونة تريد إظهارها بشكل ثابت في الدرج.

إنشاء كائن Systray مع جميع المعلومات المطلوبة

m_sysTray = new SysTray("Right click for context menu",
            new Icon(GetType(),"TrayIcon.ico"), m_menu);

إنشاء شرائط الصورة مع إطارات الرسوم المتحركة. للحصول على 6 إطار إطار سيكون للصورة عرضا من 6 * 16 وارتفاع 16 بكسل

Bitmap bmp = new Bitmap("tick.bmp");
// the color from the left bottom pixel will be made transparent
bmp.MakeTransparent();
m_sysTray.SetAnimationClip(bmp);

بدء الرسوم المتحركة تشير إلى عدد المرات التي تحتاجها إلى حلقة الرسوم المتحركة وتأخير الإطار

m_sysTray.StartAnimation(150, 5);

لإيقاف مكالمة الرسوم المتحركة

m_sysTray.StopAnimation();

نصائح أخرى

أعتقد أن أفضل طريقة للقيام بذلك هي أن يكون لديك أيقونات صغيرة متعددة يمكنك الاستمرار في تغيير كائن Systray إلى الصورة الجديدة المستندة إلى السرعة والوقت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top