Uma funcionalidade comum de se ver em vários tipos de aplicação é a utilização de ícones na chamada tray bar, a barra de ícones que fica ao lado do relógio do Windows. Veremos neste artigo que não é difícil adicionar esta função à nossa aplicação, fazendo uso do componente TTrayIcon que o Delphi nos fornece nativamente.

Para desenvolver os exemplos a seguir, utilizei o Delphi 2007, mas outras versões podem ser usadas sem comprometimento do código.

Conhecendo o componente

Antes de partirmos para os exemplos práticos, vejamos alguns detalhes relacionados as propriedades deste componente.

  • Animate: indica quando o componente exibirá ícones animados. Na prática, o que ocorre é uma variação dentre os ícones de uma lista predefinida.
  • AnimateInterval: tempo, em milisegundos, que cada ícone da lista passará exibido antes de dar lugar ao próximo.
  • BaloonFlags: ícone que aparecerá em uma caixa de diálogo no formato de balão informativo. As possibilidades são bfError(erro), bfInfo(informação), bfNone(nenhum) ou bfWarning(alerta).
  • BaloonHint: texto que será exibido no balão citado no item anterior.
  • BaloonTimeout: tempo, em milisegundos, que o balão informativo passará visível antes de ser fechado automaticamente.
  • BaloonTitle: título do balão informativo.
  • Hint: texto que aparecerá quando o cursor do mouse for posicionado sobre o ícone na tray bar, se deixado em branco, será exibido o nome do projeto.
  • Icon: imagem com extensão .ico que deve ser usada como ícone da aplicação na tray bar. Só possui efeito se a propriedade Icons for deixada em branco.
  • IconIndex: índice (começando em zero) da imagem da lista (Icons) que será exibida por padrão.
  • Icons: TImageList ou derivado contendo uma imagens que servirão de ícones da aplicação na tray bar.
  • PopupMenu: TPopupMenu ou derivado que será exibido quando o usuário clicar com a direita sobre o ícone.
  • Visible: indica quando o ícone da aplicação estará visível na tray bar.

Podemos agora partir para a parte prática da utilização deste componente. Para isso criemos uma aplicação VCL no Delphi e, no form principal, adicionemos um componente TTrayIcon.

Ícone básico

Para visualizar o ícone da aplicação na tray bar, basta selecionar um ícone na propriedade Icon, definir a propriedade Visible como true e executar o projeto. Nenhum código adicional é necessário.

Ícone animado

Para visualizar o ícone com animação, devemos adicionar um componente ImageList ao form, preenchê-lo com algumas imagens e selecioná-lo na propriedade Icons do TTrayIcon. Logo após, devemos marcar a propriedade Animate como true e executar a aplicação. Veremos que as imagens contidas no ImageList são exibidas alternadamente como ícone da aplicação.

Balão informativo

Para visualizar o balão informativo, devemos inicialmente definir um ícone, um texto e um título para ele. Fazemos isso alterando as propriedades BaloonFlags, BaloonHint, BaloonTitle quaisquer valores possíveis entre os permitidos. Feito isso, executamos o seguinte código, por exemplo, no evento onClick de um botão.

Listagem 1: Exibindo o balão informativo


procedure TForm1.Button1Click(Sender: TObject);
begin
  TrayIcon1.ShowBalloonHint();
end;

Consideramos, no exemplo acima, que o nome do controle foi mantido como TrayIcon1. A Figura 1 ilustra o resultado da execução deste código.

Balão informativo

Figura 1: Balão informativo

Menu Popup

Adicionemos um componente TPopupMenu ao form com alguns itens (pode-se, aqui, executar algum código no evento onClick dos itens para se certificar do funcionamento). Depois, devemos selecionar este controle na propriedade PopupMenu do TrayIcon e executar a aplicação. Ao clicar com a direita sobre o ícone, o menu definido será exibido.

Menu popup no tray icon

Figura 2: Menu popup no tray icon

Escondendo a aplicação e mantendo apenas o ícone

Toda essa parte de exibir ícones, balões informativos e menus popup não teriam tanta aplicação prática se o ícone da aplicação continuar visível na barra de tarefas como qualquer outro programa minimizado. Na maioria das vezes é necessário esconder a aplicação ao minimizar o form principal, para isso, poderíamos usar um componente TApplicationEvents e, no evento onMinimize, tornar o form principal invisível, como mostra a Listagem 2.

Listagem 2: Escondendo a aplicação ao minimizar


procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
  Self.Hide();
  Self.WindowState := wsMinimized;
  TrayIcon1.Visible := True;  
  TrayIcon1.Animate := True;
  TrayIcon1.ShowBalloonHint;
end;

E para tornar o form novamente visível poderíamos, por exemplo, usar o evento onDblClick do TrayIcon (Listagem 3), assim, quando o usuário clicasse duas vezes sobre o ícone, a aplicação seria novamente exibida.

Listagem 3: Tornando a aplicação novamente visível


procedure TForm1.TrayIcon1DblClick(Sender: TObject);
begin
  TrayIcon1.Visible := False;
  Show();
  WindowState := wsNormal;
  Application.BringToFront();
end;

Consideramos, nas listagens 3 e 4, que o TrayIcon está no form principal, por isso usamos a palavra reservada Self nos exemplos acima.

Conclusão

Concluímos que o Delphi nos fornece um componente bastante simples de se utilizar e que torna prática a tarefa de exibir o ícone da aplicação na tray bar. Caso o leitor tenha alguma dúvida com relação ao assunto aqui apresentado, sinta-se à vontade para questionar, utilizando a seção de comentários nesta página.

Agradeço a atenção e por aqui me despeço.