3º Passo
Na cláusula Private, digite as procedures a seguir:
...
private
{ Private declarations }
{ Tratamento dos Ícones da Aplicação }
procedure WMSysCommand(var Msg: TWMSysCommand); Message WM_SysCommand;
procedure WMTrayIcon(var Msg: TMessage); Message WM_TRAYICON;
procedure DestroyIcone;
procedure CriaIcone;
public
{ Public declarations }
end;
4º Passo
Digite a implementação a seguir para cada procedure.
{Quando for necessário criar ou destruir nosso ícone, chamaremos as procedures CriaIcone e DestroyIcone respectivamente. A API Shel_NotifyIcon requer um ponteiro para uma variável do tipo TNotifyIconData, declarada na Unit ShellApi.
procedure TForm1.CriaIcone;
var
NotifyIconData: TNotifyIconData;
begin
with NotifyIconData do
begin
cbSize:= SizeOf(TNotifyIconData);
Wnd:= Self.Handle;
uID:= 0;
uCallbackMessage:= WM_TRAYICON;
uFlags:= NIF_ICON or NIF_TIP or NIF_MESSAGE;
hIcon:= Application.Icon.Handle;
szTip:= 'Exemplo da utilização do TrayIcon by janbaceiredo';
end;
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
Application.ShowMainForm:= False;
end;
procedure TForm1.DestroyIcone;
var
NotifyIconData: TNotifyIconData;
begin
NotifyIconData.cbSize:= SizeOf(TNotifyIconData);
NotifyIconData.Wnd:= Self.Handle;
NotifyIconData.uID:= 0;
NotifyIconData.uFlags:= 0;
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
end;
{Captura todas as mensagens enviadas para a aplicação.
Neste caso, trabalhamos apenas com as mensagens SC_MINIMIZE e SC_MAXIMIZE, que são enviadas quando devemos Minimizar ou Maximizar o formulario da aplicação. Capturando estas mensagens para esconder o ícone da aplicação da Barra de Tarefas do Windows e para criar / destruir o ícone que ficará ao lado do relógio.
Obs: Você pode trabalhar com outras mensagem também. Tipo SC_CLOSE, SC_RESTORE e etc.}
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
case (Msg.CmdType) of
SC_MINIMIZE:
begin
Self.Visible:= False;
CriaIcone;
end;
SC_MAXIMIZE:
begin
Self.Visible:= True;
end
else
Inherited
end;
end;
{Quando dar um duplo clique sobre o ícone da aplicação, destrímos este mesmo ícone e exibimos o formulário principal. Isto só funciona se implementarmos um manipulador para as Mensagens WMTrayIcon, que é o que faremos abaixo.
Lembra-se da constante declarada no ínicio de nossa Unit?
Pois bem, ela é passada como parâmetro para esta procedure.}
procedure TForm1.WMTrayIcon(var Msg: TMessage);
var
Pt: TPoint;
begin
if (Msg.LParam = WM_RBUTTONDOWN) then
begin
GetCursorPos(Pt);
PopupMenu.Popup(Pt.X, Pt.Y);
PopupMenu.AutoPopup:= False;
end
else
if (Msg.LParam = WM_LBUTTONDBLCLK) then
begin
Self.Visible:= True;
DestroyIcone;
end;
end;
5º Passo
Adicione um componente PopupMenu na Guia Additional e altere seu nome para PopupMenu
Nesse componente(PopupMenu) você vai adiconar as opções que devem aparecer quando o usuario clicar com o botão direito do mouse sobre o icone da sua aplicação que esta ao lado do relógio.
Exemplo: Sair, Configurações, Opções, Maximixar e etc....
Citação:
Caso você não coloque o componente PopupMenu no seu formulario, isso irá gerar um erro de acesso a memória quando você clicar com o botão direito do mouse sobre o icone da sua aplicação que ficará do lado do relógio do computador.
Sendo assim, não se esqueça de colocar esse componente(PopupMenu).
6º Passo
A ultima etapa para realizar a sua necessidade é fazer o programa ser inicializado junto com o Windows.
Para realizar essa etapa você tem que declarar a unit Registry na cláusula Uses
Exemplo:
7º Passo
Após isso, você deve digitar o código abaixo no Evento OnCreate
procedure TForm1.FormCreate(Sender: TObject);
var
Reg: TRegistry;
begin
CriaIcone;
try
// Inicializa a variavel do tipo TRegistry
Reg:= TRegistry.Create;
// Define a hirearquia das pasta, a qual irá trabalhar.
Reg.RootKey:= HKEY_LOCAL_MACHINE;
// Cria/entra, dentro da pasta do registro no qual irá aguardar informação
Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False);
// Escreve a informção na chave
// NomeDaChave, pode ser qualquer nome que você queira
Reg.WriteString('NomeDaChave', Application.ExeName);
// Fecha a chave do registro
Reg.CloseKey;
Finally
Reg.Free;
end;
end;
Se alguém puder ajudar e para quem quiser testar, o código funciona perfeitamente, sem usar adicionais como TTrayIcon e outros...
Editado por gsguma Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Pergunta
gsguma
Como faço para iniciar o programa aberto e com o icone na tray!
Com os passos abaixo consigo iniciar minimizado apenas!
Alguém pode analisar e me dar uma dica?
1º Passo
Na clausula Uses declare a Unit ShellApi
Exemplo:
2º Passo Abaixo da cláusula Uses, declarea constante const WM_TRAYICON=WM_USER+1; Exemplo: 3º Passo Na cláusula Private, digite as procedures a seguir: 4º Passo Digite a implementação a seguir para cada procedure. {Quando for necessário criar ou destruir nosso ícone, chamaremos as procedures CriaIcone e DestroyIcone respectivamente. A API Shel_NotifyIcon requer um ponteiro para uma variável do tipo TNotifyIconData, declarada na Unit ShellApi. 5º Passo Adicione um componente PopupMenu na Guia Additional e altere seu nome para PopupMenu Nesse componente(PopupMenu) você vai adiconar as opções que devem aparecer quando o usuario clicar com o botão direito do mouse sobre o icone da sua aplicação que esta ao lado do relógio. Exemplo: Sair, Configurações, Opções, Maximixar e etc.... Citação: Caso você não coloque o componente PopupMenu no seu formulario, isso irá gerar um erro de acesso a memória quando você clicar com o botão direito do mouse sobre o icone da sua aplicação que ficará do lado do relógio do computador. Sendo assim, não se esqueça de colocar esse componente(PopupMenu). 6º Passo A ultima etapa para realizar a sua necessidade é fazer o programa ser inicializado junto com o Windows. Para realizar essa etapa você tem que declarar a unit Registry na cláusula Uses Exemplo: 7º Passo Após isso, você deve digitar o código abaixo no Evento OnCreateSe alguém puder ajudar e para quem quiser testar, o código funciona perfeitamente, sem usar adicionais como TTrayIcon e outros...
Editado por gsgumaIncluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.