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

[resolvido] Trayicon


Hudson Cavazin

Pergunta

3 respostass a esta questão

Posts Recomendados

  • 0
olha, eu tenho um trayicon da biblioteca rxlib, nele é automatico abrir o pop meno quando se clica com o botao direito do mouse, mais quando clico com o botão esquerdo, fica sem ação
Mas isso é o padrão para todos os aplicativos que ficam na Tray - pelo menos os que eu conheço. O botão esquerdo é utilizado apenas no duplo-click para ativar a aplicação (normalmente, depende de como foi programado).

como faço para que ele abra o pop menu mesmo quando clique com o botao esquerdo ?
O componente utiliza a metodologia padrão. Se você quer fazer diferente, vai ter que abandonar o uso do componente e escrever o código na mão (não é muito complicado não).

Neste post tem o código básico. Entretanto, como ao clicar no "X" para fechar o que fazemos é esconder o form (Hide), então faltou apenas um controle de quando queremos realmente fechar a aplicação - tipo utilizando uma opção do menu "Sair Alt+F4". Vamos também, incluir a sua opção para manipular o botão esquerdo. Utilize, então, o código naquele post e faça os ajustes seguintes.

Inicialmente, crie uma variável na sessão Private do seu form:

private
    FPodeFechar :Boolean;  // *** Acrescentar
    ...
depois, inicialize ela no evento OnCreate:
procedure TForm1.FormCreate(Sender: TObject);
var
  NotifyIconData: TNotifyIconData;
begin
  FPodeFechar := False;  // *** Acrescentar
  Application.ShowMainForm := False;
  ...
altere o manipulador de evento na Tray para que possa manipular, além do click-direito, o click-esquerdo:
procedure TForm1.WMTrayIcon(var Msg: TMessage);
var
  Pt: TPoint;
begin
  case Msg.lParam of
    WM_RBUTTONDOWN,  // responde ao click do botão direito e
    WM_LBUTTONDOWN : // esquerdo
      begin
        GetCursorPos(Pt);  // obtém a posição do cursor sobre o ícone na Tray
        PopupMenu1.Popup(Pt.X,Pt.Y);  // Mostra o menu pop-up
      end;
    WM_LBUTTONDBLCLK :  // no duplo-click mostra a janela principal
      Show;
  end;
end;
para corrigir a questão do fechamento da aplicação alteramos o evento OnClose para:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if not FPodeFechar then  // enquanto você não liberar, a aplicação não encerra!!!
  begin
    Action := caNone;
    Hide;
  end;
end;
seguido pela opção do menu que fechará a aplicação efetivamente. O evento OnClick da opção Sair do menu pop-up:
procedure TForm1.Sair1Click(Sender: TObject);
begin
  FPodeFechar := True;
  Close;
end;

O básico é isso.

Mas tem apenas mais um probleminha ainda. Quando o Windows for encerrado e sua aplicação estiver minimizada, nesta configuração, ele não conseguirá encerrar a sessão. Para isso, tem mais uma mensagem a ser verificada. Dê uma olhada neste outro post.

Abraços

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