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:
Figura 1: TNotifyIconData
Um grande abraço e até o próximo artigo.