2009-02-18 14 views
15

मुझे पता है कि विंडोज अधिसूचना क्षेत्र (सिस्टम ट्रे) में आइकन कैसे रखा जाए।ट्रे आइकन एनीमेशन

आइकन एनिमेट करने का सबसे अच्छा तरीका क्या है? क्या आप एनिमेटेड gif का उपयोग कर सकते हैं, या क्या आपको टाइमर पर भरोसा करना है?

मैं सी # और डब्ल्यूपीएफ का उपयोग कर रहा हूं, लेकिन WinForms भी स्वीकार कर लिया।

उत्तर

22

Abhinaba Basu's blog post Animation and Text in System tray using 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++; 
    } 
    .... 
} 

सिसट्रे

का प्रयोग बनाएँ और अपने मेनू

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

तार ऊपर एक आइकन आप ट्रे में स्थिर दिखाना चाहते हैं।

सभी आवश्यक जानकारी

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

एनीमेशन फ्रेम के साथ छवि स्ट्रिप्स बनाएं साथ एक systray वस्तु बनाएँ। 6 फ्रेम पट्टी के लिए छवि का संकेत है कि कितनी बार आप पाश करने के लिए एनीमेशन और फ्रेम देरी

m_sysTray.StartAnimation(150, 5); 

करने के लिए की जरूरत है 16 पिक्सल

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

प्रारंभ एनीमेशन के रूप में की 6 * 16 की चौड़ाई और ऊंचाई होगा एनीमेशन कॉल

m_sysTray.StopAnimation(); 
+4

उस लेख पर टिप्पणियों की जांच करना सुनिश्चित करें: "मुझ पर शर्म आती है :(कोड में कई रिसाव हैं।" (http://blogs.msdn.com/b/abhinaba/archive/2005/09/12/एनीमेशन और पाठ-इन-सिस्टम-ट्रे का इस्तेमाल करने वाली-सी। aspx # 504,147) –

2

मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका है कि कई छोटे आइकन हैं जिन्हें आप गति और समय के आधार पर नई तस्वीर पर सिस्ट्रे ऑब्जेक्ट को बदलना जारी रख सकते हैं।

संबंधित मुद्दे