Domanda

Io so come posizionare un'icona nell'area di notifica di Windows (barra delle applicazioni).

Qual è il metodo migliore per avere un'icona animata? È possibile utilizzare una GIF animata, o avete a fare affidamento su un timer?

Sto usando C # e WPF, ma WinForms accettato anche.

È stato utile?

Soluzione

blog post di Abhinaba Basu Animazione e testo nel vassoio di sistema utilizzando C # spiega.

Si tratta di:

  • fare una serie di icone ciascuno dei quali rappresentano un fotogramma.
  • commutazione delle icone nel vassoio su eventi timer
  • creare una striscia di bitmap. Ogni frame è 16x16 pixel
  • SysTray.cs

es.

entrare descrizione dell'immagine qui

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 utilizza il seguente codice per creare il frame di animazione

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());
    }
}

Per animare la StartAnimation telaio avvia un timer e nel timer icone vengono modificati per animare l'intera sequenza.

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

Utilizzo SysTray

Crea e cablare il vostro menu

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

Ottenere un'icona che si desidera visualizzare in modo statico nel cassetto.

Creare un oggetto SysTray con tutte le informazioni richieste

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

Crea le strisce di immagine con i fotogrammi di animazione. Per 6 listello del telaio l'immagine avrà una larghezza di 6 * 16 e altezza 16 pixel

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

Avvio animazione che indica quante volte è necessario ciclo l'animazione e il ritardo telaio

m_sysTray.StartAnimation(150, 5);

Per interrompere la chiamata di animazione

m_sysTray.StopAnimation();

Altri suggerimenti

Penso che il modo migliore per farlo è quello di avere più piccole icone che è possibile continuare a modificare l'oggetto systray per la nuova immagine in base alla velocità e il tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top