O Firemonkey veio com tudo e acredito profundamente que veio para ficar, mas como todo início é complicado, para esta ferramenta não poderia ser diferente. Ao utilizar esta ferramenta podemos sentir falta de alguns componentes não visuais que fazem grande falta. Um desses componentes é o TTrayIcon da VCL. Para quem não sabe, ele é o responsável por deixar o ícone da aplicação da área de notificação lá no canto inferior esquerdo perto da hora.

Para que possamos utilizar a classe TNotifyIconData em nossa aplicação, primeiramente devemos declarar em uses a cláusula “WinApi.ShellApi”.

Na seção private de seu formulário principal declare as seguintes variáveis e procedures:

Listagem 1: Declaração de variáveis e procedures


private
    { Private declarations }
   FIconShown: Boolean;
   FTrayIconData: TNotifyIconData;
   procedure ShowTrayIcon;
   procedure HideTrayIcon;
  • FIconShown é a variável responsável por informar se o ícone está no system tray ou não;
  • FTrayIcondata é o responsável pela criação do ícone na área de notificações;
  • ShowTrayIcon é o procedimento responsável por exibir o ícone na área de notificações;
  • HideTrayIcon é o procedimento responsável por ocultar o ícone na área de notificações;

Vamos, então, fazer a implementação do código de ShowTrayIcon:

Listagem 2: Implementação do método ShowTrayIcon


procedure TFrmPrincipal.ShowTrayIcon;
begin
  if not FIconShown then
  begin
    with FTrayIconData do
    begin
      uID := 1;
      Wnd :=  FmxHandleToHWND(self.Handle);
      cbSize := SizeOf;
      hIcon :=  GetClassLong(FmxHandleToHWND(self.Handle),GCL_HICONSM);
      uCallbackMessage := 0;
      uFlags := NIF_Icon OR NIF_Tip OR NIF_Message;
      StrPCopy(szTip, FrmPrincipal.Caption);
    end;
    Shell_NotifyIcon(NIM_ADD, @FTrayIconData);
    FIconShown := True;
  end;
end;

Vamos, então, falar um pouco sobre cada uma das propriedades do TNotifyIconData:

  • uID - é a propriedade de identificação do ícone;
  • Wnd - é a propriedade que se refere à janela do aplicativo;
  • cbSize - representa o tamanho do ícone;
  • hIcon - é o ícone propriamente dito. Através da função GetClassLong pegamos o ícone do próprio aplicativo.
  • uCallbackMessage - é a propriedade utilizada para saber qual evento que o mouse está disparando sobre o ícone;
  • uFlags - essa propriedade que valida a propriedade uCallbackMessage com NIF_Message, valida o ícone com NIF_Icon e valida o texto do ícone com NIF_Tip;
  • szTip - é o título do ícone;
  • Shell_NotifyIcon - é a função responsável pela criação (NIM_ADD) do ícone, exclusão (NIM_DELETE) e modificação do ícone (NIM_MODIFY);

No evento OnCreate do formulário principal, chame o procedimento acima:

Listagem 3: Evento OnCreate do form principal


ShowTrayIcon;

Vamos, agora, fazer a implementação de HideTrayIcon:

Listagem 4: Implementação do método HideTrayIcon


procedure TFrmPrincipal.HideTrayIcon;
begin
  if FIconShown then
  begin
    Shell_NotifyIcon(NIM_DELETE, @FTrayIconData);
    FIconShown := False;
  end;
end;

No evento OnDestroy do formulário principal, chame o procedimento acima:

Listagem 5: Evento OnDestroy do form principal


HideTrayIcon;

Rode sua aplicação e terá o seguinte resultado:

 TNotifyIconData

Figura 1: TNotifyIconData

Um grande abraço e até o próximo artigo.