Desenvolvimento - Visual Basic
System Tray - O seu ícone ao lado do relógio do Windows
O System Tray é situada no Windows Taskbar, geralmente no canto direito inferior ao lado do relógio.
por César Augusto PinheiroNeste artigo abordarei como adicionar, alterar ou excluir seu ícone ao lado do relógio do Windons além de personalizar o título, a mensagem e o ícone do balão que é exibido sobre o seu ícone de acordo com a sua preferência.
Primeiramente desenvolveremos todo o código referente ao objeto SystemTray em um módulo de classe no qual criaremos seus métodos e propriedades. Sendo assim, você poderá instanciar o módulo de classe em qualquer parte de seu projeto possibilitando acessar e/ou definir as propriedades e métodos do objeto SystemTray de acordo com o seu propósito.
Pronto para começar?
Inicie um módulo de classe, renomei-e como
clsSystemTray e insere o código a seguir:
Option Explicit "************************************************** "Classe criada por César A Pinheiro em 18/12/2007 "Última alteração em 18/12/2007 por César A Pinheiro "Descr.: cria um objeto System Tray (ícone ao lado do relógio do windows) "************************************************** "Função que envia ícone para System Tray (ao lado do relógio do windows) Private Declare Function Shell_NotifyIcon Lib _ "shell32.dll" Alias "Shell_NotifyIconA" _ ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long "Declaração de propriedades do objeto STray Private Const NIM_ADD = &H0 Private Const NIM_MODIFY = &H1 Private Const NIM_DELETE = &H2 Private Const NIF_MESSAGE = &H1 Private Const NIF_ICON = &H2 Private Const NIF_INFO = &H10 Private Const NIF_TIP = &H4 Private Const NIIF_NONE = &H0 Private Const NIIF_INFO = &H1 Private Const NIIF_WARNING = &H2 Private Const NIIF_ERROR = &H3 Private Const NIIF_USER = &H4 Private Const WM_USER = &H400 Private Const WM_MOUSEMOVE = &H200 Private Const TRAY_CALLBACK = (WM_USER + 1001&) Private Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 128 dwState As Long dwStateMask As Long szInfo As String * 256 uTimeout As Long szInfoTitle As String * 64 dwInfoFlags As Long End Type Private STray As NOTIFYICONDATA "variáreis valores de propriedades Private m_id As Long Private m_hWnd As Long Private m_activated As Boolean Private m_tool_tip_text As String Private m_balloon_text As String Private m_balloon_title As String Private m_balloon_icon As Long Private m_icon As StdPicture Public Enum InfoFlags trayNone = NIIF_NONE trayInformation = NIIF_INFO trayExclamation = NIIF_WARNING trayCritical = NIIF_ERROR trayDefinedUser = NIIF_USER End Enum Public Sub Show(value_hWnd As Long) If Activated = True Then Err.Raise 513, , "O objeto já está ativo." Exit Sub End If hWnd = value_hWnd Call DefinePropertiesTray Call Shell_NotifyIcon(NIM_ADD, STray) Activated = True End Sub Public Function Refresh() If Activated = False Then Err.Raise 516, , "O objeto não está ativo." Exit Function End If Call DefinePropertiesTray Call Shell_NotifyIcon(NIM_MODIFY, STray) End Function Public Function Unload() If Activated = False Then Err.Raise 516, , "O objeto não está ativo." Exit Function End If Call Shell_NotifyIcon(NIM_DELETE, STray) Activated = False End Function "define as propriedades do SystemTray Private Sub DefinePropertiesTray() STray.uID = Id STray.hWnd = hWnd STray.cbSize = Len(STray) STray.hIcon = m_icon STray.szTip = ToolTipText STray.szInfo = BalloonText STray.szInfoTitle = BalloonTitle STray.uCallbackMessage = WM_MOUSEMOVE STray.dwState = 0 STray.dwStateMask = 0 STray.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP Or NIF_INFO STray.dwInfoFlags = BalloonIcon End Sub Public Property Let Icon(new_value As String) Set m_icon_tray = LoadPicture(new_value) End Property Private Property Let hWnd(new_value As Long) m_hWnd = new_value End Property Private Property Let Activated(new_value As Boolean) m_activated = new_value End Property Public Property Let ToolTipText(new_value As String) m_tool_tip_text = Left(new_value, 127) End Property Public Property Let BalloonText(new_value As String) m_balloon_text = Left(new_value, 255) End Property Public Property Let BalloonTitle(new_value As String) m_balloon_title = Left(new_value, 63) End Property Public Property Let BalloonIcon(new_value As InfoFlags) m_balloon_icon = new_value End Property Public Property Let Id(new_value As Long) m_id = new_value End Property Private Property Get hWnd() As Long hWnd = m_hWnd End Property Public Property Get Activated() As Boolean Activated = m_activated End Property Public Property Get ToolTipText() As String ToolTipText = m_tool_tip_text & vbNullChar End Property Public Property Get BalloonText() As String BalloonText = m_balloon_text & vbNullChar End Property Public Property Get BalloonTitle() As String BalloonTitle = m_balloon_title & vbNullChar End Property Public Property Get BalloonIcon() As InfoFlags If m_balloon_icon = 0 Then BalloonIcon = trayNone Else BalloonIcon = m_balloon_icon End If End Property Public Property Get Id() As Long If m_id = 0 Then Id = vbNull Else Id = m_id End If End Property |
Pronto! Agora você pode instanciar
o módulo de classe no código do seu formulário e acessar
suas propriedades e métodos.
Instanciando o módulo de classe no código do seu formulário:
Private SysTray As New clsSystemTray
Lista das Propriedades e Métodos da classe:
PROPRIEDADES |
|||||||||||||||||||
Activate | Retorna valor booleano (True/False) indicando se o ícone
encontra-se ativo ou não. Somente Leitura |
||||||||||||||||||
BalloonIcon | Opcional. Expressão numérica que indica o tipo de ícone a ser exibido no balão de mensagem do System Tray. O valor padrão é 0 (zero).
|
||||||||||||||||||
BalloonText | Opcional. Expressão de seqüência de caracteres exibida
como mensagem no Balão de Mensagem. Se omitir, o Balão de Mensagem não será exibido. |
||||||||||||||||||
BalloonTitle | Opcional. Expressão de seqüência de caracteres exibida como título no Balão de Mensagem. | ||||||||||||||||||
Icon | Obrigatória. Expressão de seqüência de caracteres
indicando o caminho completo inclusive a sua extensão (*.ico) do
ícone a ser exibido no SystemTray. Se omitir, causará um erro. |
||||||||||||||||||
Id | Opcional. Expressão numérica para indicar um valor de identificação
para o SystemTray. Caso você deseje exibir mais de um ícone no SystemTray, deverá informar valores distintos para cada um deles. |
||||||||||||||||||
ToolTipText | Opcional. Expressão de seqüência de caracteres exibida na caixa de mensagem quando o cursor do mouse se posiciona sobre o SystemTray. |
MÉTODOS |
|
Refresh | Atualiza todas as propriedades definidas pelo usuário
do SystemTray quando o mesmo se encontra ativo. Se o valor da propriedade Activate for False e você chamar o método Refresh, causará um erro. |
Show | Mostra o ícone e as propriedades definidas do SystemTray. Sintaxe |
Unload | Remove o objeto SystemTray. Se o valor da propriedade Activate for True e você chamar o método Refresh, causará um erro. |
Veja um exemplo no código do meu
Formulário:
Private Sub Form_Load() Dim SysTray As New clsSystemTray With SysTray .Icon = "C:\Documents and Settings\Cesar A Pinheiro _ & "\Meus documentos\StartNoDebug.ico" .BalloonTitle = "Olá pessoal" .BalloonText = "Vejam que legal!" & vbCrLf _ & "O meu ícone está ao lado do relógio do Windows." .ToolTipText = "Você está com o mouse sobre eu" .BalloonIcon = trayInformation .Show (Me.hWnd) End With End Sub |
Bom pessoal, finalizamos por aqui e espero
que este artigo seje de grande utilidade para vocês.
Se desejarem deixar algum comentário acessem meu blog: http://cesarapinheiro.wordpress.com
Agradeço a todos e principalmente a Deus por mais esta oportunidade.
- Sou programador, o mágico atende na sala ao ladoPHP
- Criando Aplicações Limitadas a Uma Única Instância (Single Instance)C#
- Criando um pacote de instalação com o INNO SETUPVisual Basic
- Nota Fiscal Eletrônica: Construindo um "Servidor de Assinatura Digital" com o NFeExpr...Visual Basic
- Visual Basic 6 – Simulação de um GCVisual Basic