Fórum Minimizado perto do relógio #289160
22/07/2005
0
Ou seja, quando o Windows inicia ele se abre e fica minimizado do lado relógio na barra de tarefas!!!!
Quero q meu programa faça a mesma coisa!
Tem como fazer?
Valeu Galera!!!
Denysk
Curtir tópico
+ 0Posts
22/07/2005
Nildo
Gostei + 0
22/07/2005
Daemon
Gostei + 0
23/07/2005
Denysk
Estou usando o Delphi 5 e Windows 98SE
Vcs não teriam esse componente pra me enviar ´TTrayIcon´
Agradeceria muito!!!
Valeu Galera!!!
Gostei + 0
24/07/2005
Michael
O melhor componente que eu conheço para este fim é o CoolTrayIcon. Procure no Google por ele.
Entre outras coisas ele permite q vc exiba aquele balão com um texto dentro para o ícone na área de notificações. Show de bola. Vem com um EXE demo completo.
[]´s
Gostei + 0
25/07/2005
Janbaceiredo
para você conseguir esse efeito sem a necessidade de usar componentes de terceiros, pode fazer dá seguinte forma:
[b:cc37d0b8b6][color=blue:cc37d0b8b6]1º Passo[/color:cc37d0b8b6][/b:cc37d0b8b6]
Na clausula [color=red:cc37d0b8b6][b:cc37d0b8b6]Uses[/b:cc37d0b8b6][/color:cc37d0b8b6] declare a Unit [color=red:cc37d0b8b6][b:cc37d0b8b6]ShellApi[/color:cc37d0b8b6][/b:cc37d0b8b6]
Exemplo:
[list:cc37d0b8b6][i:cc37d0b8b6]uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Registry, [color=red:cc37d0b8b6][b:cc37d0b8b6]ShellApi[/b:cc37d0b8b6][/color:cc37d0b8b6];[/i:cc37d0b8b6][/list:u:cc37d0b8b6]
[b:cc37d0b8b6][color=blue:cc37d0b8b6]2º Passo[/color:cc37d0b8b6][/b:cc37d0b8b6]
Abaixo da cláusula [color=red:cc37d0b8b6][b:cc37d0b8b6]Uses[/b:cc37d0b8b6][/color:cc37d0b8b6], declarea constante [b:cc37d0b8b6]const WM_TRAYICON=WM_USER+1;[/b:cc37d0b8b6]
Exemplo:
[list:cc37d0b8b6][i:cc37d0b8b6]uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Registry, ShellApi;
[color=red:cc37d0b8b6][b:cc37d0b8b6]const WM_TRAYICON=WM_USER+1;[/b:cc37d0b8b6][/color:cc37d0b8b6][/i:cc37d0b8b6][/list:u:cc37d0b8b6]
[b:cc37d0b8b6][color=blue:cc37d0b8b6]3º Passo[/color:cc37d0b8b6][/b:cc37d0b8b6]
Na cláusula [color=red:cc37d0b8b6][b:cc37d0b8b6]Private[/b:cc37d0b8b6][/color:cc37d0b8b6], digite as procedures a seguir:
[list:cc37d0b8b6][i:cc37d0b8b6][b:cc37d0b8b6][color=red:cc37d0b8b6]
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;
[/color:cc37d0b8b6][/b:cc37d0b8b6][/i:cc37d0b8b6][/list:u:cc37d0b8b6]
[b:cc37d0b8b6][color=blue:cc37d0b8b6]4º Passo[/color:cc37d0b8b6][/b:cc37d0b8b6]
Digite a implementação a seguir para cada procedure.
[list:cc37d0b8b6][i:cc37d0b8b6][b:cc37d0b8b6]
[color=olive:cc37d0b8b6]
{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. [/color:cc37d0b8b6]
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;
[color=olive:cc37d0b8b6]{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.}[/color:cc37d0b8b6]
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;
[color=olive:cc37d0b8b6]{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.}[/color:cc37d0b8b6]
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;[/b:cc37d0b8b6][/i:cc37d0b8b6][/list:u:cc37d0b8b6]
[b:cc37d0b8b6][color=blue:cc37d0b8b6]5º Passo[/color:cc37d0b8b6][/b:cc37d0b8b6]
Adicione um componente PopupMenu na Guia Additional e [color=red:cc37d0b8b6][b:cc37d0b8b6]altere seu nome para PopupMenu[/b:cc37d0b8b6][/color:cc37d0b8b6]
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....
[b:cc37d0b8b6][color=blue:cc37d0b8b6]6º Passo[/color:cc37d0b8b6][/b:cc37d0b8b6]
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 [color=red:cc37d0b8b6][b:cc37d0b8b6]Registry[/color:cc37d0b8b6][/b:cc37d0b8b6] na cláusula [color=red:cc37d0b8b6][b:cc37d0b8b6]Uses[/color:cc37d0b8b6][/b:cc37d0b8b6]
Exemplo:
[list:cc37d0b8b6][i:cc37d0b8b6]uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Registry, ShellApi, [color=red:cc37d0b8b6][b:cc37d0b8b6]Registry[/b:cc37d0b8b6][/color:cc37d0b8b6];[/i:cc37d0b8b6][/list:u:cc37d0b8b6]
[b:cc37d0b8b6][color=blue:cc37d0b8b6]7º Passo[/color:cc37d0b8b6][/b:cc37d0b8b6]
Após isso, você deve digitar o código abaixo no [color=red:cc37d0b8b6][b:cc37d0b8b6]Evento OnCreate[/color:cc37d0b8b6][/b:cc37d0b8b6]
[list:cc37d0b8b6][i:cc37d0b8b6][b:cc37d0b8b6]
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 vc queira
Reg.WriteString(´NomeDaChave´, Application.ExeName);
// Fecha a chave do registro
Reg.CloseKey;
Finally
Reg.Free;
end;
end;[/b:cc37d0b8b6][/i:cc37d0b8b6][/list:u:cc37d0b8b6]
E isso é tudo...
Até mais,
Antônio.
Gostei + 0
25/07/2005
Michael
Quem tava com a dúvida não era eu não. hehehehe
E meu nome é [b:f7325e52b1]Michael[/b:f7325e52b1], não Michel.
Abraços!
Gostei + 0
25/07/2005
Janbaceiredo
Desculpa Michael.
Falha minha....
A mensagem era para o Denysk
Até Antônio.
Gostei + 0
25/07/2005
Denysk
Qualquer coisa volto a postar!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)