Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
TrayIcon y su Popup

Hola !

Cualquiera de los programas que tenemos abajo a la derecha en el SysTary al lado del reloj, cuando hacemos Click con el ratón sobre ellos, aparece un Menu Popup.

Hasta ahí llego.

Pero cuando hacemos Click en cualquier otro programa diferente (sin siquiera haber elegido una opción del Menu Popup), o en cualquier otra parte del escritorio, ese Menu Popup desaparece automáticamente, evidentemente sin tener que estar esa aplicación activa.

Ahi NO llego !

Como puedo hacer desaparecer el Popupmenu dichoso al hacer click en cualquier otra parte.

He probado con Application.OnDeactivate pero al parecer no entra ahí ya que la ventana principal de la aplicación esta oculta (Visible := False).

Gracias por vuestra ayuda.

Edito y añado : Lo que quiero decir es cuando pulso el botón izquierdo del ratón. Con el derecho y mediante la activación del PopupMenu de manera automática, si funciona.

Pero por ejemplo el messenger, si se pulsa el botón izquierdo sale tam´bién el Popupmenu, y si pulso en otro lado, desaparece.
__________________
Piensa siempre en positivo !

Última edición por gluglu fecha: 26-09-2007 a las 18:51:33.
Responder Con Cita
  #2  
Antiguo 26-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Se supone que eso funciona solito, sin necesidad de hacerle nada.

Acabo de probarlo con el TTrayIcon de D2007 y funciono sin problema, recuerdo haberlo hecho alguna vez con el de las RxTray y eso tambien funcionaba sin problema.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 26-09-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Hola glugu, el tema de los popup y el systray es sencillo. Antes de mostrar el popup se debe de usar la funcion SetForegroundWindow con la ventana a la que pertenece ese menu. No importa si la ventana esta oculta.
Responder Con Cita
  #4  
Antiguo 26-09-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
y ese no es el comportamiento normal del popup?? al tener el foco otra aplicacion este va a desaparecer acabo de probarlo en delphi 7 funciona asi sin cambiar ninguna propiedad ni evento
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 26-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por seoane Ver Mensaje
Hola glugu, el tema de los popup y el systray es sencillo. Antes de mostrar el popup se debe de usar la funcion SetForegroundWindow con la ventana a la que pertenece ese menu. No importa si la ventana esta oculta.
¿Pero el TTrayIcon no hace ya esa llamada a dicha función?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 26-09-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
pero bueno hoy el club esta movido aqui tambien se me han adelantado
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #7  
Antiguo 26-09-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
¿Pero el TTrayIcon no hace ya esa llamada a dicha función?
gluglu no ha mencionado el TTrayicon Puede que este usando, por ejemplo, el delphi 7 que no trae ese componente y le toque crear el icono "a mano"
Responder Con Cita
  #8  
Antiguo 26-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por eduarcol Ver Mensaje
pero bueno hoy el club esta movido aqui tambien se me han adelantado
Bueno, pero el movido sos vos, te me haz adelantado
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #9  
Antiguo 26-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por seoane Ver Mensaje
gluglu no ha mencionado el TTrayicon Puede que este usando, por ejemplo, el delphi 7 que no trae ese componente y le toque crear el icono "a mano"
, cierto, cierto, tienes razón... no habia caido en ese detalle, aunque seguramnete mi subconciente si, ya que mencione el TRxTray .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #10  
Antiguo 26-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Perdón, me perdí por ahí 20 minutos y menuda se ha armado también aquí.

Utilizo Delphi 2006 y sí, si utilizo el TTrayIcon.

Insisto, el problema es con el botón izquierdo ...

En el evento OnClick del TrayIcon tengo

Código Delphi [-]
procedure TWakeUp.TrayIcon1Click(Sender: TObject);
begin
  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;

y de hecho, cuando pulso en otra parte del escritorio o en otra aplicación, ese menú popup NO desaparece automáticamente.

No lo he probado, pero podría tener algo que ver que la Ventana principal de la aplicación correspondiente a ese TrayIcon tengo FormStyle := fsStayOnTop ?, ya que cuando se active, quiere que esté siempre por delante de las demás.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #11  
Antiguo 26-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Una posible solución pasa por lo que ha comentado Domingo:

Código Delphi [-]
  SetForegroundWindow(self.Handle);
  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  PostMessage(self.Handle, WM_NULL, 0, 0);

Echa un vistazo a la ayuda de la función "TrackPopupMenu" (del API de Windows) para más información.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #12  
Antiguo 26-09-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Pero no entiendo por que no usas la propiedad PopupMenu del TTrayicon, asi el ya se encarga de mostraralo correctamente.

De todas formas si quieres mostraralo "a mano":
Código Delphi [-]
procedure TWakeUp.TrayIcon1Click(Sender: TObject);
begin
  SetForegroundWindow(PopupMenu1.WindowHandle);
  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
Responder Con Cita
  #13  
Antiguo 26-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Efectivamente, gracias Domingo.

Seoane tiene razón. Con este código en el OnClick del TrayIcon funciona correctamente :

Código Delphi [-]
procedure TWakeUp.TrayIcon1Click(Sender: TObject);
begin
  SetForegroundWindow(Handle);
  PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;

Vamos a rizar el rizo. Resulta que (vuelvo a poner como ejemplo el messenger), si pulso el botón izquierdo del ratón, abre el correspondiente Popupmenu del messenger. Si ahora pulso dobre cualquier aplicación que se encuentra en la barra de tareas, se cierra el popupmenu y se da 'foco' directamente a la aplicación seleccionada de la barra de tareas.

A mi no me funciona así. Al pulsar sobre una aplicación de la barra de tareas desaparece correctamente el popupmenu de mi TrayIcon pero la aplicación seleccionada en la barra de tareas se pone intermitente y no se le dá foco automáticamente.

__________________
Piensa siempre en positivo !
Responder Con Cita
  #14  
Antiguo 26-09-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Te veo cambiando al componente de las RX
Responder Con Cita
  #15  
Antiguo 26-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Creo que las RX no están disponibles para VCL.Net .... o me equivoco ?
__________________
Piensa siempre en positivo !
Responder Con Cita
  #16  
Antiguo 26-09-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Perdon que me meta pero yo trate con el componente TrayIncon y la verdad no me funciono bien, me genero varios problemas.
Aqui tienes un ejemplo, sin ese componente, tal vez te sirva.
No pude subir el zip, estoy teniendo problemas con esto.
Colocas un popupmenu y le pones abrir en su primer item.
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ShellApi,
  Forms, Dialogs, Menus;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    Abrir1: TMenuItem;
    procedure Abrir1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    IconData : TNotifyIconData;
    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
    procedure Espabila(var Msg : TMessage); message WM_USER+1;

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin 
  if (Msg.CmdType = SC_MINIMIZE) then begin
    with IconData do 
    begin 
      cbSize := sizeof(IconData);
      Wnd := Handle;
      uID := 100;
      uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
      uCallbackMessage := WM_USER + 1;
      {Usamos de icono el mismo de la aplicacion}
      {We use the same icon as the application}
      hIcon := Application.Icon.Handle;
      {Como Hint del icono, el nombre de la aplicacion}
      {The name of te app for the hint of the icon}
      StrPCopy(szTip, Application.Title);
    end; 
    {Ponemos el icono al lado del reloj}
    {Place the icon next to the clock}
    Shell_NotifyIcon(NIM_ADD, @IconData);
    {Ocultamos la Form...}
    {Hide the form...}
    Hide;
  end else DefaultHandler(Msg);
end; 

procedure TForm1.Espabila(var Msg : TMessage);
{Aqui se recibe la pulsacion sobre el icono}
{Here we recieve the click on the icon}
var 
  p : TPoint;
begin 
  if Msg.lParam = WM_RBUTTONDOWN then begin 
    SetForegroundWindow(Handle);
    GetCursorPos(p);
    PopupMenu1.Popup(p.x, p.y);
    PostMessage(Handle, WM_NULL, 0, 0);
  end; 
end;


procedure TForm1.Abrir1Click(Sender: TObject);
begin
  {Mostramos de nuevo la form}
  {We show the form again}
  Form1.Show;
  ShowWindow(Application.Handle, SW_HIDE);
  {Y nos cargamos el icono de la system tray}
  {Destroy the systray icon}
  Shell_NotifyIcon(NIM_DELETE, @IconData);
  IconData.Wnd:=0;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   {Quitamos el icono (en el caso de haberlo puesto antes...)}
  {Take off the icon (in case of had placed it before.....)}
  if IconData.Wnd <> 0 then Shell_NotifyIcon(NIM_DELETE, @IconData);

end;

end.
Saludos
Responder Con Cita
  #17  
Antiguo 27-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Caral, gracias por tu aporte también.

Lo he probado tal y como lo expones y denoto que tengo los mismos problemas. Cuando pulso sobre cualquier otra aplicación de la barra de tareas, esta se queda intermitente (algunas veces, otras no) y no trae al frente dicha aplicación seleccionada.

No sé si será un problema en general de Windows XP, de los iconos de Delphi en el SysTray, o de la instalación particular de mi ordenador.

Seguiré intentando de ambas formas y si encuentro una solución definitiva y satisfactoria, volveré a comentarla aquí.

Saludos,
__________________
Piensa siempre en positivo !
Responder Con Cita
  #18  
Antiguo 01-11-2011
Avatar de Arsenio
Arsenio Arsenio is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
Arsenio Va por buen camino
Yo estoy usando el TTrayIcon en Delphi XE, y funciona todo correcto... salvo que al recuperar la ventana y querer otra vez minimizarla no ejecuta el evento, si cambio de ventana y vuelvo a la de mi proyecto vuelve a funcionar.

Lo que si hice distinto (y acá puede estar el tema) es que para capturar el evento que minimiza utilicé el de la aplicación:

Código Delphi [-]
  //Asigno evento a la aplicación
  Application.OnMinimize := MinimizarAplicacion;

El evento es de los "comunes":
Código Delphi [-]
procedure TFormCustom.MinimizarAplicacion(Sender: TObject);
begin
  TrayIcon1.Visible := True;
  Hide();
end;

Para restaurar la ventana hice un método que es llamado tanto en el doble click del TaryIcon como en un item del popUpMenu:

Código Delphi [-]
procedure TFormCustom.Restaurar1Click(Sender: TObject);
begin
  RestaurarVentana;
end;

procedure TFormCustom.TrayIcon1DblClick(Sender: TObject);
begin
  RestaurarVentana;
end;

procedure TFormCustom.RestaurarVentana;
begin
  //Lo siguiente es para darle prioridad a la ventana
  SetForegroundWindow(Self.Handle);
  TrayIcon1.Visible := False;
  Show();  
  WindowState := wsNormal;
end;

Si a alguno se le ocurre que puede estar fallando se agradece.
__________________
Arsenio Lupín - howtoarsenio.blogspot.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Trayicon mjjj Varios 2 21-09-2007 00:35:16
Menu popup johurgi Varios 1 27-07-2007 13:55:49
Icono de Firebird como Trayicon brakaman Firebird e Interbase 5 10-04-2007 19:36:08
La v del popup REHome OOP 3 06-10-2005 14:23:17
Problemas con TRAYICON!! marceloalegre Varios 3 07-06-2005 17:49:07


La franja horaria es GMT +2. Ahora son las 03:07:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi