Pergunta

Eu sei como colocar um ícone na área de notificação do Windows (bandeja do sistema).

O que é o melhor método para ter um ícone animado? você pode usar um GIF animado, ou você tem que confiar em um temporizador?

Eu estou usando C # e WPF, mas aceitou WinForms também.

Foi útil?

Solução

o post de Abhinaba Basu blogue Animação e texto na bandeja do sistema usando C # explica.

Tudo se resume a:

  • fazer uma série de ícones cada um dos quais representam um quadro de animação.
  • mudar os ícones na bandeja sobre eventos timer
  • criar uma faixa de bitmap. Cada quadro é 16x16 pixels
  • SysTray.cs

por exemplo.

enter descrição da imagem aqui

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 usa o código a seguir para criar o quadro da animação

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 o StartAnimation quadro inicia um timer e no temporizador os ícones são alterados para animar toda a sequência.

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++;
    }
    ....
}

Usando SysTray

Criar e ligar o seu menu

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

Obter um ícone que pretende mostrar estaticamente na bandeja.

Crie um objeto SysTray com todas as informações necessárias

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

Criar tiras de imagem com os quadros de animação. Para 6 ripa de armação a imagem terá uma largura de 6 * 16 e altura que 16 pixels

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

animação Iniciar indicando quantas vezes você precisa para fazer um loop a animação eo atraso quadro

m_sysTray.StartAnimation(150, 5);

Para chamar parada animação

m_sysTray.StopAnimation();

Outras dicas

Eu acho que a melhor maneira de fazer isso é ter vários pequenos ícones que você pode continuar a alterar o objeto systray para a nova imagem com base na velocidade e do tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top