Dê uma olhada na sua barra de tarefas. Veja a área onde está localizada a hora? Existem outros ícones lá? O local é chamado de bandeja do sistema do Windows. Gostaria de colocar o seu Delphi ícone do aplicativo lá? Deseja que o ícone seja animado - ou reflita o estado do seu aplicativo?
Isso seria útil para programas que permanecem em execução por longos períodos de tempo sem interação do usuário (tarefas em segundo plano que você normalmente mantém em execução no seu PC o dia todo).
O que você pode fazer é fazer com que seus aplicativos Delphi pareçam estar minimizando a Bandeja (em vez de a Barra de Tarefas, à direita do botão Win Start), colocando um ícone na bandeja e criando simultaneamente seus formulários invisível.
Vamos Tray It
Felizmente, a criação de um aplicativo que é executado na bandeja do sistema é bastante fácil - apenas uma função (API), Shell_NotifyIcon, é necessária para realizar a tarefa.
A função é definida no Unidade ShellAPI e requer dois parâmetros. O primeiro é um sinalizador que indica se o ícone está sendo adicionado, modificado ou removido e o segundo é um ponteiro para uma estrutura TNotifyIconData que contém as informações sobre o ícone. Isso inclui a alça do ícone a ser exibido, o texto a ser exibido como uma dica de ferramenta quando o mouse está sobre o ícone, o identificador da janela que receberá as mensagens do ícone e o tipo de mensagem que o ícone enviará para este janela.
Primeiro, na seção Privada do seu formulário principal, coloque a linha:
TrayIconData: TNotifyIconData;
tipo
TMainForm = classe(TForm)
procedimento FormCreate (Remetente: TObject);
privado
TrayIconData: TNotifyIconData;
{Declarações particulares}público{Declarações públicas}fim;
Então, no seu formulário principal OnCreate, inicialize a estrutura de dados TrayIconData e chame a função Shell_NotifyIcon:
com TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = identificador;
uID: = 0;
uFlags: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
ícone: = Aplicação. Ícone. Lidar com;
StrPCopy (szTip, aplicação. Título);
fim;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);
O parâmetro Wnd da estrutura TrayIconData aponta para a janela que recebe mensagens de notificação associadas a um ícone.
O ícone indica o ícone que queremos adicionar à bandeja - nesse caso, o ícone principal de aplicativos é usado.
O szTip contém o texto da dica de ferramenta para exibir o ícone - no nosso caso, o título do aplicativo. O szTip pode conter até 64 caracteres.
O parâmetro uFlags está definido para informar ao ícone para processar as mensagens do aplicativo, usar o ícone do aplicativo e sua dica. o uCallbackMessage aponta para o identificador de mensagem definido pelo aplicativo. O sistema usa o identificador especificado para as mensagens de notificação enviadas para a janela identificada pelo Wnd sempre que um evento de mouse ocorre no retângulo delimitador do ícone. Este parâmetro é definido como a constante WM_ICONTRAY definida na seção de interface da unidade de formulários e é igual a: WM_USER + 1;
Você adiciona o ícone à bandeja chamando a função de API Shell_NotifyIcon. O primeiro parâmetro "NIM_ADD" adiciona um ícone à área da bandeja. Os outros dois valores possíveis, NIM_DELETE e NIM_MODIFY, são usados para excluir ou modificar um ícone na bandeja - veremos mais adiante neste artigo. O segundo parâmetro que enviamos ao Shell_NotifyIcon é a estrutura TrayIconData inicializada.
Pegue um
Se você EXECUTAR seu projeto agora, verá um ícone próximo ao Relógio na Bandeja. Observe três coisas.
1) Primeiro, nada acontece quando você clica (ou faz qualquer outra coisa com o mouse) no ícone colocado na Bandeja - ainda não criamos um procedimento (manipulador de mensagens).
2) Segundo, existe um botão na barra de tarefas (obviamente não queremos isso lá).
3) Terceiro, quando você fecha o aplicativo, o ícone permanece na bandeja.
Leva dois
Vamos resolver isso ao contrário. Para remover o ícone da bandeja ao sair do aplicativo, é necessário chamar o Shell_NotifyIcon novamente, mas com o NIM_DELETE como o primeiro parâmetro. Você faz isso no OnDestroy manipulador de eventos para o formulário principal.
procedimento TMainForm. FormDestroy (Remetente: TObject);
início
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
fim;
Para ocultar o aplicativo (botão do aplicativo) da barra de tarefas, usaremos um truque simples. No código-fonte Projetos, adicione a seguinte linha: Aplicativo. ShowMainForm: = Falso; antes da aplicação. CreateForm (TMainForm, MainForm); Por exemplo, deixe-o parecer:
...
início
Inscrição. Inicializar;
Inscrição. ShowMainForm: = Falso;
Inscrição. CreateForm (TMainForm, MainForm);
Inscrição. Corre;
fim.
E, finalmente, para que o ícone da Bandeja responda aos eventos do mouse, precisamos criar um procedimento de manipulação de mensagens. Primeiro, declaramos um procedimento de tratamento de mensagens na parte pública da declaração do formulário: procedure TrayMessage (var Msg: TMessage); mensagem WM_ICONTRAY; Segundo, a definição deste procedimento se parece com:
procedimento TMainForm. TrayMessage (var Msg: TMessage);
begincase Msg.lParam do
WM_LBUTTONDOWN:
início
ShowMessage ('Botão esquerdo clicado
- vamos MOSTRE o formulário! ');
MainForm. Exposição;
fim;
WM_RBUTTONDOWN:
início
ShowMessage ('Botão direito do mouse clicado
- vamos ocultar o formulário! ');
MainForm. Ocultar;
fim;
fim;
fim;
Este procedimento foi projetado para manipular apenas nossa mensagem, o WM_ICONTRAY. Ele pega o valor LParam da estrutura da mensagem, que pode nos fornecer o estado do mouse após a ativação do procedimento. Por uma questão de simplicidade, lidaremos apenas com o botão esquerdo do mouse para baixo (WM_LBUTTONDOWN) e com o botão direito do mouse (WM_RBUTTONDOWN). Quando o botão esquerdo do mouse está pressionado sobre o ícone, mostramos o formulário principal, quando o botão direito é pressionado, o ocultamos. Obviamente, existem outras mensagens de entrada do mouse que você pode manipular no procedimento, como botão para cima, clique duas vezes no botão etc.
É isso aí. Rápido e fácil. Em seguida, você verá como animar o ícone na bandeja e como fazer com que esse ícone reflita o estado do seu aplicativo. Ainda mais, você verá como exibir um menu pop-up próximo ao ícone.