Ir para conteúdo
Fórum Script Brasil
  • 0

Ocultar Um Programa


kabessa

Pergunta

1 resposta a esta questão

Posts Recomendados

  • 0

você quer deixar ele no Sys Tray ?

oh veja se é isso

alguns programas tornam-se mais utilizáveis e mais acessíveis pelo simples fato de estarem no System Tray ou “bandeja do sistema”, como alguns gostam de chamar. Um bom exemplo disto é o uso da calculadora do Windows, veja todo o caminho que deve-se percorrer até poder executa-la (excluindo é claro a possibilidade de se configurar uma tecla de atalho para ela ou ainda de coloca-la na barra de tarefas):

Menu Iniciar, Programas, Acessórios, Calculadora.

Ao invés de fazer isso muitos usuários simplesmente optam por pegar a calculadora que esta sobre a mesa, ou na gaveta e fazer o cálculo desejado. Agora pense bem se houvesse um ícone para a calculadora que estivesse a apenas um clique do mouse, certamente ela seria bem mais utilizada.

Vale também lembrar aqui que às vezes precisamos fazer com que uma programa fique rodando o dia todo mas algum usuário descuidado sempre acaba clicando no botão de fechar, ou ele pressiona as teclas ALT+F4, sempre por acidente e acaba por fechar aquele programa que deveria ficar rodando.

Tenho certeza que torna-se muito mais difícil fechar o seu programa por acidente estando ele no System Tray, e desta forma imune a cliques ou qualquer outro comando executado por descuido (é claro que ninguém vai estar imune à um CTRL+ALT+DEL), mas esta medida protege seu programa e ainda o torna mais acessível/disponível para o usuário.

Bom vamos ao trabalho então.

Usaremos durante este processo só uma função da API do windows, Shell_NotifyIcon .

Esta função esta definida na Unit ShellAPI e requer apenas dois parâmetros.

Obs: Não esqueça de declarar a Unit ShellAPI na seção Uses do formulário principal.

O primeiro parâmetro é uma flag que vai indicar se o ícone esta sendo Adicionado, Modificado ou Removido e o segundo parâmetro é um ponteiro que será apontado para a estrutura TNotifyIconData passando o handle do ícone, o texto que será exibido em forma de hint quando o mouse estiver sobre o ícone, também o handle da janela que receberá a mensagem que o ícone vai enviar e o tipo da mensagem para esta janela.

Primeiro adicione na seção private do seu formulário principal a linha:

TrayIconData: TNotifyIconData;

Depois adicione ao método OnCreate do formulário principal um procedimento para inicializar a estrutura TrayIconData e chamar a função Shell_NotifyIcon veja abaixo o exemplo:

O parâmetro Wnd da estrutura TaryIconData, aponta para o programa que vai receber as mensagem vindas do ícone associado.

O parâmetro hIcon indica qual ícone deve ser exibido no System Tray, neste caso estamos usando o mesmo ícone do programa.

O Parâmetro szTip recebe o texto que será exibido como hint ao passar o mouse sobre o ícone no System Tray, aqui estamos usando o título do programa, se você quiser alterar o texto existe uma limitação quanto ao seu tamanho que não pode ser superior à 64 caracteres.

O parâmetro uFlags esta definindo o ícone para receber as mensagens do programa ( process application messages ), habilitar a exibição do ícone e também do Hint.

O parâmetro uCallbackmessage aponta para o identificador de mensagens do programa, o sistema usa este identificador para informar as mensagens identificadas como Wnd ou eventos do mouse, mas que não ocorreram na área do ícone. Este parâmetro recebe o valor da constante WM_ICONTRAY que equivale à WM_USER+1.

Devemos declarar então a constante WM_ICONTRAY, e atribuir à ela o valor WM_USER+1

Agora que definimos os parâmetros do ícone podemos adicioná-lo ao System Tray chamando a função Shell_NotifyIcon da API.

O primeiro parâmetro NIM_ADD adiciona o ícone na área do System Tray, existem ainda dois valores possíveis de serem passados para esta função da API, são NIM_DELETE e NIM_MODIFY que são usados para remover ou modificar um ícone na área do System Tray. Veremos exemplos de uso destes parâmetros mais à frente deste artigo. O Segundo parâmetro que passamos para a função foi a estrutura TrayIconData que inicializamos anteriormente.

Neste ponto se você rodar seu programa você vai ver que foi adicionado um ícone ao System tray, observe três ítens:

1- Primeiro, nada acontece quando você clica sobre o ícone (nós ainda não criamos nenhum procedimento para tratar isso).

2- Segundo, além do ícone no System Tray ainda existe o botão correspondente ao seu programa na barra de tarefas (nosso objetivo era justamente remover isto).

3- Terceiro, quando fechamos o programa o ícone permanece no System Tray até que o mouse seja levado sobre ele.

Bom chegamos à segunda parte do nosso artigo.

Vamos começar pelo mais simples, remover o ícone do System Tray após o programa ser fechado.

Vamos adicionar ao evento OnDestroy do formulário principal uma chamada para a função

Shell_NotifyIcon passando como primeiro parâmetro o valor NIM_DELETE

Para “escondermos” ou “remover” o botão do programa da barra de tarefas podemos usar um truque simples. No código do projeto (Menu Project / View Source), adicione a linha:

Application.ShowMainForm := False;

Após a linha:

Application.CreateForm(TMainForm, MainForm);

Agora vamos à parte mais complicada de todo o processo, criar um procedimento para fazer o ícone responder aos eventos do mouse.

Primeiro declare na área public do formulário principal o procedimento para fazer o tratamento das mensagens recebidas.

procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;

Segundo vamos à definição do procedimento declarado acima:

Considerações finais:

Neste artigo criamos um procedimento simples para tratar apenas as mensagens mais básicas geradas por eventos do mouse sobre o ícone, poderíamos por exemplo adicionar procedimentos para tratar o clique duplo com o botão esquerdo ou direito sobre o ícone, ao ser soltado o botão, etc.....

Veja algo interessante, podemos fazer com que o volume do som aumente enquanto o botão esquerdo estiver pressionado sobre o ícone, ou que o volume baixe durante o tempo que o botão direito estiver pressionado sobre o ícone, existem inúmeras possibilidades, bastas ter tempo e um pouco de paciência para adaptarmos este exemplo às mais diversas necessidades.

Bom por hora é isso, simples e rápido!!!

No próximo artigo você verá como animar o ícone, fazer com que o ícone represente o estado de sua aplicação e ainda como criar um menu PopUp que será exibido ao clicar sobre o ícone.

Baseado no artigo original de http://delphi.about.com/library/weekly/aa121801a.htm

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...