Abhinaba Basu's blog post Animation and Text in System tray using C# explica.
Se reduce a:
- hacer una serie de iconos cada uno de los cuales representan una trama de animación.
- cambiando los iconos en la bandeja en eventos de temporizador
- crear una tira de mapa de bits. Cada trama se 16x16 píxeles
- uso SysTray.cs
por ejemplo
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
utiliza el siguiente código para crear el marco de la animación
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());
}
}
Para animar el marco StartAnimation
inicia un temporizador y el temporizador de los iconos se cambian para animar la secuencia completa .
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++;
}
....
}
El uso de SysTray
Crea y alambre de su menú
ContextMenu m_menu = new ContextMenu();
m_menu.MenuItems.Add(0, new MenuItem("Show",new
System.EventHandler(Show_Click)));
Obtener un icono que desea mostrar de forma estática en la bandeja.
crear un objeto de SysTray con toda la información requerida
m_sysTray = new SysTray("Right click for context menu",
new Icon(GetType(),"TrayIcon.ico"), m_menu);
Crear tiras de imagen con los cuadros de animación. Para 6 franja marco de la imagen tendrá una anchura de 6 * 16 y altura de hasta 16 píxeles
Bitmap bmp = new Bitmap("tick.bmp");
// the color from the left bottom pixel will be made transparent
bmp.MakeTransparent();
m_sysTray.SetAnimationClip(bmp);
la animación de inicio que indica cuántas veces se necesita bucle de la animación y el retraso de las tramas
m_sysTray.StartAnimation(150, 5);
Para llamada de la parada de animación
m_sysTray.StopAnimation();
Asegúrese de revisar los comentarios en ese artículo: "la culpa es mía :(Hay muchas fugas en el código" (http://blogs.msdn.com/b/abhinaba/archive/2005/09/12/animation-and-text-in-system-tray-using-c. aspx # 504147) –