GARANTIR DESCONTO

Fórum Minimizado perto do relógio #289160

22/07/2005

0

O que devo fazer para que meu programa faço o mesmo q o Norton Antivirus?

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

Denysk

Responder

Posts

22/07/2005

Nildo

Procure no Google um componente que se chama TTrayIcon.


Responder

Gostei + 0

22/07/2005

Daemon

....concordo com o camarada. ..eu tenho o código para se criar um tray icon, mas nenhuma vai te trazer facilidades igual aos dos componentes. ...quanto à inicialização, vc tem duas opções. ..ou criar um atalho do seu sistema no inicializar do menu iniciar.. ..ou criar um registro no Registry ....


Responder

Gostei + 0

23/07/2005

Denysk

Encontrei um instalador com o nome ´abfComponents_Full_D6´ mas fica requisitando dois outros componetes um tal de ´vcl.pas´ e ´designide.pas´!!!

Estou usando o Delphi 5 e Windows 98SE

Vcs não teriam esse componente pra me enviar ´TTrayIcon´

Agradeceria muito!!!

Valeu Galera!!!


Responder

Gostei + 0

24/07/2005

Michael

Olá colega!

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


Responder

Gostei + 0

25/07/2005

Janbaceiredo

Caro Michel,

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....

Caso você não coloque o componente PopupMenu no seu formulario, isso irá gerar um erro de acesso a memória quando vc 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).


[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.


Responder

Gostei + 0

25/07/2005

Michael

Olá colega!

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!


Responder

Gostei + 0

25/07/2005

Janbaceiredo

Putz...
Desculpa Michael.
Falha minha....
A mensagem era para o Denysk

Até Antônio.


Responder

Gostei + 0

25/07/2005

Denysk

Valeu Antônio, vou tentar fazer isso!!!


Qualquer coisa volto a postar!!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar