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
é umaEnum
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étodoShowBalloonTip
aceita 1 ou 4 argumentos entre 2 overloads.TimeOut
, ou tempo de apresentação (em milisegundos).
TimeOut,
BalloonTipTitle,
BalloonTipTexte
BallonTipIcon`, 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