Ir para o conteúdo

NotifyIcons: Notificação fácil no system tray

Introdução

Quem utiliza Microsoft Office ou Windows Live Messenger já notou com toda a certeza no que acontece quando minimiza ou fecha a janela principal da aplicação. A aplicação não deixa de correr, passa apenas a ficar representada no "system tray" por um pequeno ícone, a partir do qual a aplicação pode ser restaurada ou pequenas ordens podem ser dadas sem recorrer à janela da aplicação. Não tão frequente, mas nem por isso menos útil, os BalloonTips são excelentes meios de comunicar discreta e agradavelmente uma informação quando a aplicação se encontra a trabalhar em baixo perfil, no "system tray".

System Tray?

System Tray, ou literalmente Tabuleiro do Sistema está localizado na barra de tarefas do Windows, típicamente no canto inferior direito, apresentando normalmente o relógio do sistema e alguns ícones como o do volume. Para aplicações que necessitem de se manter em execução sem que estejam a ocupar espaço visível na barra de tarefas, até porque se torna incómodo de trabalhar assim, é função do tabuleiro do sistema manter representações dessas aplicações, acessíveis.

BalloonTips?

Já se deparou com eles inúmeras vezes. Um BalloonTip significa literalmente dica em balão ou balão de dica. Quando as aplicações no tabuleiro ou até mesmo execuções do próprio sistema operativo (que não se traduzem em nenhuma aplicação a correr visivelmente) necessitam de focar a atenção do utilizador sobre si, indirectamente, recorrem às dicas em balão. Para ver uma, basta ligar um novo dispositivo USB, por exemplo, e verificará que o sistema operativo recorre ao balão de dica para informar que um novo dispositivo foi ligado.

Da teoria à prática

Na nossa realidade, a classe que nos permite usufruír do tabuleiro do sistema e dos balões de dica chama-se NotifyIcon.

Comecemos por criar uma nova instância:

    Private WithEvents NIcon As New NotifyIcon

Existem 3 operações evidentes para esta classe:

Mostrar o ícone no tabuleiro

        NIcon.Icon = Me.Icon
        NIcon.Visible = True
        NIcon.Text = "A minha aplicação está representada aqui!!"
  • Icon determina o ícone que vai aparecer no tabuleiro do sistema.
  • Visible determina a visibilidade do ícone. Se ele está lá ou não.
  • Text é o texto que aparece ao utilizador quando o cursor do rato passa por cima do ícone no tabuleiro.

  • Importante: A propriedade Icon aceita ícones provenientes de qualquer fonte, incluíndo recursos embebidos.

Esconder o ícone do tabuleiro

        NIcon.Visible = False

Mostrar um balão de dica

        NIcon.BalloonTipIcon = ToolTipIcon.Info
        NIcon.BalloonTipTitle = "Excelente informação!"
        NIcon.BalloonTipText = "Informo que estes balões são espectaculares!"
        NIcon.ShowBalloonTip(1500)
  • BalloonTipIcon é uma Enum que contém 4 tipos de ícone para o balão: Erro, Informação, Aviso e Nenhum.
  • BalloonTipTitle é o título do balão, apresentado a negrito.
  • BalloonTipText é a mensagem que se quer transmitir. O método ShowBalloonTip aceita 1 ou 4 argumentos entre 2 overloads.
  • TimeOut, ou tempo de apresentação (em milisegundos).

TimeOut,BalloonTipTitle,BalloonTipTexteBallonTipIcon`, onde se passam por argumentos todos os valores que também se podem passar por as propriedades acima descritas.

Nota: 1 milisegundo é 1/1000 do segundo. 1000/1000 do segundo, ou 1000 milisegundos representam 1 segundo.

Aviso: É impossível mostrar um balão de dica se o ícone não estiver visível no tabuleiro do sistema.

Reproduzir o exemplo deste artigo

No form de “startup” introduzir:

3x Button 1x ContextMenuStrip de nome CMS, 2x Item do ContextMenu, "clicáveis", de nome EscondeCMS e DispBalaoCMS.

E substituir todo o código da form pelo código abaixo.

Public Class Form1
    Private WithEvents NIcon As New NotifyIcon

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MostraIcone()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        EscondeIcone()
    End Sub

    Private Sub MostraIcone()
        NIcon.Icon = Me.Icon
        NIcon.Visible = True
        NIcon.Text = "A minha aplicação está representada aqui!!"
        NIcon.ContextMenuStrip = CMS
    End Sub

    Private Sub EscondeIcone()
        NIcon.Visible = False
    End Sub

    Private Sub DisparaInfo()
        NIcon.BalloonTipIcon = ToolTipIcon.Info
        NIcon.BalloonTipTitle = "Excelente informação!"
        NIcon.BalloonTipText = "Informo que estes balões são espectaculares!"
        NIcon.ShowBalloonTip(1500)
        'Ou enviar a configuração em forma de argumentos:
        'NIcon.ShowBalloonTip(1500, "Excelente informação!", "Informo que estes balões são espectaculares!", ToolTipIcon.Info)
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        DisparaInfo()
    End Sub

    Private Sub EscondeCMS_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles EscondeCMS.Click
        If Me.Visible = False Then
            Me.Visible = True
            EscondeCMS.Text = "Esconde"
        Else
            Me.Hide()
            EscondeCMS.Text = "Mostra"
        End If
    End Sub

    Private Sub DispBalaoCMS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DispBalaoCMS.Click
        DisparaInfo()
    End Sub
End Class

Ideia: Experimente esconder/mostrar a aplicação através de um "clique" em cima do ícone no tabuleiro do sistema, tirando partido do evento Click (um dos vários eventos que o NotifyIcon possuí) que é disparado quando o "clique" acontece.

Ideia: O exemplo do artigo utiliza menus de contexto. Poderá saber mais sobre menus de contexto através do artigo: Context Menus