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

Tray icon com Firemonkey


junior103

Pergunta

Bom dia. Peguei alguns exemplos do uso do Tray icon no firemonkey, mas todos eles estão com o seguinte bug.

Quando clico em cima do ícone que se encontra ao lado do relógio do S.O. com o botão direito do mouse, o popupmenu é acionado mas ele fica atrás da bandeja dos ícones. Alguém tem uma solução para isso?

Editado por junior103
Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

amigo, normalmente esse problema é de componente. baixe o rxlib para o delphi berlin

e instale os componentes

http://www.micrel.cz/RxLib/files/unrxlib_275_u_1_0_18.rar

ou veja se esses exemplos te ajudam.

http://stackoverflow.com/questions/2889291/delphi-minimize-application-to-systray

http://stackoverflow.com/questions/11820105/minimize-delphi-form-to-system-tray

esse exemplo é para o XE10, mas serve para o Berlin

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
46 minutos atrás, Jhonas disse:

amigo, normalmente esse problema é de componente. baixe o rxlib para o delphi berlin

e instale os componentes

http://www.micrel.cz/RxLib/files/unrxlib_275_u_1_0_18.rar

ou veja se esses exemplos te ajudam.

http://stackoverflow.com/questions/2889291/delphi-minimize-application-to-systray

http://stackoverflow.com/questions/11820105/minimize-delphi-form-to-system-tray

esse exemplo é para o XE10, mas serve para o Berlin

abraço

No vcl funciona normal. O que eu quero é no Multi-DeviceApplication. No Multi-DeviceApplication não tem o componente Trayicon, mas peguei um exemplo na net fiz e funcionou normal... Acontece que quando clico no ícone criado ele abre o popumenu em baixo da gaveta de ícones ao lado do relógio, o correto seria em cima.

Não encontrei nenhuma solução ainda pra isso :(

Segue o código fonte:

 

//------------------------------------------------------------------------------
//Cria icone do form na bandeja de notificações
//------------------------------------------------------------------------------
procedure TForm3.CriaIcone;
begin
   criado := True;
   with NotifyIconData do begin
      cbSize          := SizeOf;
      Wnd             := AllocateHWnd(WMTrayIcon);
      uID             := 0;
      uCallbackMessage:= WM_TRAYICON;
      uFlags          := NIF_ICON or NIF_TIP or NIF_MESSAGE;
      hIcon           := GetClassLong(FmxHandleToHWND(Form3.Handle),GCL_HICONSM);
      szTip           := 'Teste TrayIcon';
   end;
   Shell_NotifyIcon(NIM_ADD, @NotifyIconData);

end;

//------------------------------------------------------------------------------
//Função que aguarda mensagem. Por exemplo: Pega o ponto cricado da janela
//------------------------------------------------------------------------------
procedure TForm3.WMTrayIcon(var Msg: TMessage);
var
   Pt: TPoint;
begin

   //PopupBringToFront;
   if(criado)then begin
      MostrarEsconderTaskBar(False);
   end;

   if (Msg.LParam = WM_RBUTTONDOWN) then begin
      if Assigned(PopupMenu) then begin
         GetCursorPos(Pt);
         SetForegroundWindow(FmxHandleToHWND(Form3.Handle));

         PopupMenu.Popup(Pt.X, Pt.Y);
         PostMessage(FmxHandleToHWND(Form3.Handle), WM_NULL, 0, 0);

      end;

   end else
      if (Msg.LParam = WM_LBUTTONDBLCLK) then begin

      end;
end;

//------------------------------------------------------------------------------
//Função que aguarda mensagem. Por exemplo: se o form foi minimizado
//------------------------------------------------------------------------------
function WndProc(Code: integer; WParam, LParam: LongInt): LRESULT; stdcall;
var
  msg: TCWPRetStruct;
begin;
   if (Code >= HC_ACTION) and (LParam > 0) then begin
      msg := PCWPRetStruct(LParam)^;
      if (msg.Message = WM_SIZE) and (msg.WParam = SIZE_MINIMIZED)then begin
         if not criado then begin
            Form3.CriaIcone;
         end else begin
            Form3.Visible:= True;
            Form3.MostrarEsconderTaskBar(False);
         end;
      end;
   end;
   result := CallNextHookEx(WndProcHook, Code, WParam, LParam)
end;
//------------------------------------------------------------------------------

initialization
   WndProcHook := SetWindowsHookEx(WH_CALLWNDPROCRET, @WndProc, 0, GetCurrentThreadId);
finalization
   UnhookWindowsHookEx(WndProcHook);
end

 

Editado por junior103
Link para o comentário
Compartilhar em outros sites

  • 0

Acontece que quando clico no ícone criado ele abre o popumenu em baixo da gaveta de ícones ao lado do relógio, o correto seria em cima.

parece que isso tem haver com a posição quando é criado a janela

tem um exemplo nesse link usando o windows 10

http://stackoverflow.com/questions/12946150/how-to-bring-my-application-to-the-front

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Jhonas disse:

Acontece que quando clico no ícone criado ele abre o popumenu em baixo da gaveta de ícones ao lado do relógio, o correto seria em cima.

parece que isso tem haver com a posição quando é criado a janela

tem um exemplo nesse link usando o windows 10

http://stackoverflow.com/questions/12946150/how-to-bring-my-application-to-the-front

abraço

Tentei com os exemplos... mas não deu certo. :(

Link para o comentário
Compartilhar em outros sites

  • 0

Tente tirar o componente do form, depois de um Build All no projeto e coloque novamente o componente no form e veja se resolve.

se não resolver, desinstale o componente do delphi e instale-o novamente.

OBS: Estou usando o windows 7 e isso não acontece.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Em 2017-4-28 at 17:26, Jhonas disse:

Tente tirar o componente do form, depois de um Build All no projeto e coloque novamente o componente no form e veja se resolve.

se não resolver, desinstale o componente do delphi e instale-o novamente.

OBS: Estou usando o windows 7 e isso não acontece.

abraço

Não deu certo.... Estou desenvolvendo em Multi device aplicanttion com firemonkey, então tive a necessidade de estar usando tray icon mas o mesmo não tem como no VCL. Peguei exemplos na net para usar o trayicon no firemonkey e encontrei poucos exemplos e os que encontrei esta com esse problema que foi citado.  Testei o executável no windows 7 e comportou da mesma forma...

Editado por junior103
Link para o comentário
Compartilhar em outros sites

  • 0

amigo, minha outra sugestão seria essa

http://bit.ly/JWSPD5

 

  Uses: FMX.Platform, FMX.Platform.Win, WinApi.ShellApi, WinApi.Windows

 cria uma janela, e execute o seguinte código:

procedure Tmain_form.FormCreate(Sender: TObject);
var
  nid : TNotifyIconData;
begin

  with nid do
  begin
  cbSize := SizeOf;
  Wnd := FmxHandleToHWND(self.Handle);
  uID := 1;
  uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
  uCallbackMessage := 100;
  hIcon := GetClassLong(FmxHandleToHWND(self.Handle),GCL_HICONSM); // Take the icon of the application window
  StrPCopy(szTip, 'This is my Icon TimeAct.ru');
  end;
  { try to show the icon }
  Shell_NotifyIcon( NIM_ADD, @nid );

end;

 Este código funciona no Windows 7.

Link para referencia: https://translate.google.com.br/translate?hl=pt-BR&sl=en&u=http://www.devsuperpage.com/search/Articles.aspx%3FG%3D2%26ArtID%3D135482&prev=search

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0
43 minutos atrás, Jhonas disse:

amigo, minha outra sugestão seria essa

http://bit.ly/JWSPD5

 


  Uses: FMX.Platform, FMX.Platform.Win, WinApi.ShellApi, WinApi.Windows

 cria uma janela, e execute o seguinte código:

procedure Tmain_form.FormCreate(Sender: TObject);
var
  nid : TNotifyIconData;
begin

  with nid do
  begin
  cbSize := SizeOf;
  Wnd := FmxHandleToHWND(self.Handle);
  uID := 1;
  uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
  uCallbackMessage := 100;
  hIcon := GetClassLong(FmxHandleToHWND(self.Handle),GCL_HICONSM); // Take the icon of the application window
  StrPCopy(szTip, 'This is my Icon TimeAct.ru');
  end;
  { try to show the icon }
  Shell_NotifyIcon( NIM_ADD, @nid );

end;

 Este código funciona no Windows 7.

Link para referencia: https://translate.google.com.br/translate?hl=pt-BR&sl=en&u=http://www.devsuperpage.com/search/Articles.aspx%3FG%3D2%26ArtID%3D135482&prev=search

abraço

 

OK. Mas como faço para usar o popupMenu com esse exemplo?

Link para o comentário
Compartilhar em outros sites

  • 0

existe um componente tryicon para o firemokey ....  veja o primeiro link que passei ( baixe o demo )

no tryicon tem uma propriedade para voce linkar o popupMenu ( que é outro componente )

onde voce coloca as opções de maximizar ou sair do aplicativo.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
58 minutos atrás, Jhonas disse:

existe um componente tryicon para o firemokey ....  veja o primeiro link que passei ( baixe o demo )

no tryicon tem uma propriedade para voce linkar o popupMenu ( que é outro componente )

onde voce coloca as opções de maximizar ou sair do aplicativo.

abraço

Eu fiz seguindo o exemplo. Como pode ver na imagem, o menu esta ficando atrás da bandeja de ícones. Por que será?

Obs: estou desenvolvendo em Multi-Device Aplicattion - delphi.

TrayIcon.jpg

Link para o comentário
Compartilhar em outros sites

  • 0

ok... vamos tentar mais uma coisa:

clique com o botão direito do mouse na seta dos icones ( onde mostra os 4 icones )

escolha > Personalizar

depois marque: Sempre mostrar todos os icones e notificações na barra de tarefas

clique no botão OK para finalizar

e veja se resolve.

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0
14 horas atrás, Jhonas disse:

ok... vamos tentar mais uma coisa:

clique com o botão direito do mouse na seta dos icones ( onde mostra os 4 icones )

escolha > Personalizar

depois marque: Sempre mostrar todos os icones e notificações na barra de tarefas

clique no botão OK para finalizar

e veja se resolve.

abraço

 

Isso funciona, mas não pode ser assim. Teria que funcionar como no VCL. 

Link para o comentário
Compartilhar em outros sites

  • 0
21 horas atrás, Jhonas disse:

faça um contato com o suporte da embarcadero

Brazil: +55-11-3741-5555

abraço

Resolvido :). Na propriedade StyleName do popupmenu coloquei StayOnTop. Após ter fieto isso voltou a funcionar.

Editado por junior103
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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...