Jump to content
Fórum Script Brasil

Question

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?

Edited by junior103
Link to post
Share on other sites

16 answers to this question

Recommended Posts

  • 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 to post
Share on other 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

 

Edited by junior103
Link to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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...

Edited by junior103
Link to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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.

Edited by junior103
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148911
    • Total Posts
      644950
×
×
  • Create New...