Exibir prg apenas no icon tray

Delphi

27/01/2004

Bom dia,

Alguém sabe como faço para fazer com que o programa apareça apenas no icon tray.

Já arrumei um componente que faz um icone aparecer do lado do relógio, e tb configurei o form para não exibir na barra de tarefas.
Mas quando minimizo o programa ele fica aparecendo minimizado em cima do botão iniciar.

Estou usando o seguinte procedimento para esconder o aplicativo.

procedure TForm1.FormCreate(Sender: TObject);
type
TRegisterServiceProcess = function (dwProcessID, dwType:DWord) : DWORD; stdcall;
var
Handle: THandle;
RegisterServiceProcess: TRegisterServiceProcess;
begin
//*** Nao aparece no Ctr+Alt+Del ***********************************************
Handle := LoadLibrary(´KERNEL32.DLL´);
RegisterServiceProcess := GetProcAddress(Handle, ´RegisterServiceProcess´);
RegisterServiceProcess(GetCurrentProcessID, 1);
FreeLibrary(Handle);
//*** Nao aparece na barra ***********************************************
SetWindowLong(Application.Handle, GWL_EXSTYLE,GetWindowLong(Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
end;

Grato,


Denis

Denis

Curtidas 0

Respostas

Paulo_amorim

Paulo_amorim

27/01/2004

Olá

na Unit da aplicaçao, antes do Application.CreateForm coloca
Application.Showmainform := False;


GOSTEI 0
Denis

Denis

27/01/2004

Valeu !!!!!!

Poxa ! O negócio era mais simples do que eu imaginava ....


GOSTEI 0
Paulo_amorim

Paulo_amorim

27/01/2004

Olá

De fato, eh bem simples

Na verdade eu nao uso esse componente que vc disse usar...eu achei outra forma tambem!

Ou seja, existem varios meios...

Até+


GOSTEI 0
Elias Jr

Elias Jr

27/01/2004

Olá De fato, eh bem simples Na verdade eu nao uso esse componente que vc disse usar...eu achei outra forma tambem! Ou seja, existem varios meios... Até+



Você poderia me mostrar essa forma? Muito obrigado.


GOSTEI 0
Denis

Denis

27/01/2004

Olá

Se for o componente que usei para criar um ícone da aplicação, o mesmo pode ser baixado no site [url]http://www.delphi.eti.br[/url]

Lá tem um componente para o ícone. Ou tb pode usar a tradicional rxlib.

Denis[/url]


GOSTEI 0
Paulo_amorim

Paulo_amorim

27/01/2004

[quote:10eded2953=´Elias Jr´]
Olá De fato, eh bem simples Na verdade eu nao uso esse componente que vc disse usar...eu achei outra forma tambem! Ou seja, existem varios meios... Até+



Você poderia me mostrar essa forma? Muito obrigado.[/quote:10eded2953]

Olá
Eu fiz um modelinho simples, que soh mostra e esconde quando clica no Tray...a partir dai vai da sua criatividade...
dois pontos importantes:
Incluir na USES o ShellAPI...
Na Unit da aplicaçao, colocar o SHowMainFOrm False, senao ele aparece...

aqui vai:
unit UPrincipal;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ShellAPI;

const
  WM_ICONTRAY = WM_USER + 1;

type
  TFPrincipal = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
    procedure FormClick(Sender: TObject);
  private
    TrayIconData: TNotifyIconData;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FPrincipal: TFPrincipal;

implementation                            

{$R *.DFM}

procedure TFPrincipal.FormCreate(Sender: TObject);
begin
     //Define as propriedades do ícone
     with TrayIconData do
     begin
          cbSize := SizeOf(TrayIconData);
          Wnd := Handle;
          uID := 0;
          uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
          uCallbackMessage := WM_ICONTRAY;
          hIcon := Application.Icon.Handle;
          StrPCopy(szTip, Application.Title);
     end;

     //Cria o ícone no win system tray
     Shell_NotifyIcon(NIM_ADD, @TrayIconData);
end;

//Tira o ícone do win system tray
procedure TFPrincipal.FormDestroy(Sender: TObject);
begin
     Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;

//Procedimento para mostrar/esconder a aplicação
procedure TFPrincipal.TrayMessage(var Msg: TMessage);
begin
     case Msg.lParam of

          //Clique duplo do o mouse para exibir
          WM_LBUTTONDBLCLK:
          begin
               FPrincipal.Show;
          end;
          //Clicar com o botão direito para esconder
          WM_RBUTTONDOWN:
          begin
               FPrincipal.Hide;
          end;
     end;
end;

//Esconde a aplicação quando se clica nela
procedure TFPrincipal.FormClick(Sender: TObject);
begin
     FPrincipal.Hide;
end;

end.


Espero que ajude
Até+


GOSTEI 0
Eniorm

Eniorm

27/01/2004

ressucitando o post eheh......

sobre o systray, usei o RXLib RXSysTray e funciona perfeito, estou montando um esquema assim:

qdo o aplicativo é minimizado, ele mostra no systray, e esconte o iconedo do systray qdo for restaurado, até ai tudo bem

mas como fazer q quanto minimizado, desaparecer o nome da barra de tarefas, e aparecer novamente qdo restaurado???? Tipo isso ocorre com o FlashGet e outros.

Abraços,


GOSTEI 0
Eniorm

Eniorm

27/01/2004

(sobe)


GOSTEI 0
Marco Salles

Marco Salles

27/01/2004

ressucitando o post eheh......


é verdade... :lol:

Mas executando a dica do Paulo amorim , o executavel simplismente Some.. Não aparece em lugar nenhum Na barra de tarefas :cry: :cry: :cry:
Eu Estava esperando que ele aparecesse em forma de icone na barra de tarefas :cry: :cry: :cry:
O que posso estar fazendo de errado :oops: :oops: :oops: :oops:


GOSTEI 0
Netosdr

Netosdr

27/01/2004

Olá 

na Unit da aplicaçao, antes do Application.CreateForm coloca 
Application.Showmainform := False;


Só para complementar a dica do colega Paulo, essa propriedade funciona quando a propriedade Visible do Form Principal está setada para False.

Abraço!


GOSTEI 0
POSTAR