Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Minimizar al trayicon

Hola amigos, tengo esto:
Código PHP:
private:    // User declarations
   // Capturar mensajes al form
  
void __fastcall OnWMSysCommand(TWMSysCommand &Msg); //message WM_SYSCOMMAND;
  
TWndMethod OldWMSysCommand;
  
void __fastcall NewWMSysCommand(TMessageMessage);
protected:
   
BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER
(WM_SYSCOMMANDTWMSysCommandOnWMSysCommand)
   
END_MESSAGE_MAP(TForm
Código PHP:
void __fastcall TForm1::OnWMSysCommand(TWMSysCommand &Msg)
{
   
// Minimizando?
   
if (Msg.CmdType == SC_MINIMIZE){
      
// Accion de ocultar el form
      
SysTrayIcon1->Minimize();
   }else{
      
// comportamiento estandard
      
DefaultHandler(Msg);
   }

y no me compila dando el error:
Cita:
[C++ Error] Main.cpp(412): E2316 '_fastcall TForm1::OnWMSysCommand(TMessage &)' is not a member of 'TForm1'
¿Me podeis ayudar?

Última edición por Casimiro Noteví fecha: 27-10-2014 a las 16:06:49.
Responder Con Cita
  #2  
Antiguo 27-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
al final lo he podido solucionar. Solo tuve que cambiar el DefaultHandle por DispathMessage.
Responder Con Cita
  #3  
Antiguo 27-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
No comprendo porqué quieres manejar el mensaje SC_MINIMIZE para forzar a SysTrayIcon a ejecutar Minimize() cuando eso ya lo detecta por si solo el componente. Fíjate en este fragmento de código de SysTrayIcon:

Código PHP:
bool __fastcall TSysTrayIcon::ApplicationHookProc(TMessage &Message)
{
   if (
Message.Msg == WM_SYSCOMMAND)
   {
      if (
Message.WParam == SC_MINIMIZE)
         
Minimize();
      if (
Message.WParam == SC_RESTORE)
         
Restore();
   }

   return 
false;

Tiene capturado ("hookeado") el mensaje WM_SYSCOMMAND de la aplicación para detectar SC_MINIMIZE y SC_RESTORE. No tiene sentido rehacerlo, ¿qué necesidad has encontrado para hacerlo?

Saludos.

Última edición por escafandra fecha: 27-10-2014 a las 21:11:56.
Responder Con Cita
  #4  
Antiguo 27-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
No comprendo porqué quieres manejar el mensaje SC_MINIMIZE para forzar a SysTrayIcon a ejecutar Minimize() cuando eso ya lo detecta por si solo el componente. Fíjate en este fragmento de código de SysTrayIcon:

Código PHP:
bool __fastcall TSysTrayIcon::ApplicationHookProc(TMessage &Message)
{
   if (
Message.Msg == WM_SYSCOMMAND)
   {
      if (
Message.WParam == SC_MINIMIZE)
         
Minimize();
      if (
Message.WParam == SC_RESTORE)
         
Restore();
   }

   return 
false;

Tiene capturado ("hookeado") el mensaje WM_SYSCOMMAND de la aplicación para detectar SC_MINIMIZE y SC_RESTORE. No tiene sentido rehacerlo, ¿qué necesidad has encontrado para hacerlo?

Saludos.
Pues amigo, algo raro pasaba porque al yo minimizar el form no se minimizaba al tray icon.
Te pongo el link para que lo puedas mirar: https://mega.co.nz/#!xpNmESJI!6GSaf6...nPmleTPSDZtoNg

Está en Main.h y Main.cpp
Responder Con Cita
  #5  
Antiguo 28-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aguml.
Cita:
Empezado por aguml Ver Mensaje
Hola amigos, tengo esto:
Código PHP:
private:    // User declarations
   // Capturar mensajes al form
  
void __fastcall OnWMSysCommand(TWMSysCommand &Msg); //message WM_SYSCOMMAND;
  
TWndMethod OldWMSysCommand;
  
void __fastcall NewWMSysCommand(TMessageMessage);
protected:
   
BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER
(WM_SYSCOMMANDTWMSysCommandOnWMSysCommand)
   
END_MESSAGE_MAP(TForm
...

y no me compila dando el error:

¿Me podeis ayudar?
Fuera de tópico, mas allá de la explicación sobre el componente que te ha dado escafandra, para cualquier otro caso ese código no va a funcionar.

Debería bastar con:
Código PHP:
...
class 
TForm1 : public TForm
{
private:
  
void __fastcall WMSysCommand(TWMSysCommand &Msg);

protected:
  
BEGIN_MESSAGE_MAP
  VCL_MESSAGE_HANDLER
(WM_SYSCOMMANDTWMSysCommandWMSysCommand)
  
END_MESSAGE_MAP(TForm)

__published:

public:
  
__fastcall TForm1(TComponentOwner);
};
extern PACKAGE TForm1 *Form1;
... 
Código PHP:
...
void __fastcall TForm1::WMSysCommand(TWMSysCommand &Msg)
{
  switch (
Msg.CmdType) {
    case 
SC_MINIMIZEShowMessage("Minimize");break;
    case 
SC_RESTORE ShowMessage("Restore"); break;
    case 
SC_MAXIMIZEShowMessage("Maximize");break;
  }
  
DefaultHandler(&Msg);
}
... 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 28-10-2014 a las 00:11:22.
Responder Con Cita
  #6  
Antiguo 28-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Ya se a que te refieres, aguml. El componente no está diseñado para cambiar la visibilidad del formulario en el evento OnMinimize pero es fácil de solucionar.

Hoy es tarde para mi. Mañana te subo un cambio en el componente que permitirá hacerlo.


Saludos.
Responder Con Cita
  #7  
Antiguo 28-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
ok, mil gracias amigo.
Supongo que tendras que añadir alguna propiedad para indicar si queremos que lo haga o no ¿verdad? Ya puestos estaria bien que podamos elegir que debe hacer al pulsar el boton de cerrar ya que hay muchas aplicaciones que al darle al boton cerrar de la barra del form te colocan la aplicacion en el systrayicon.
De momento he aprendido mucho intentando solucionarlo.
Por cierto ecfisa, lo que me indicas no está del todo bien ya que si o si ejecutas la accion por defecto y si yo lo oculto a la icontray y luego ejecuto la accion por defecto es como si no hubiera hecho nada ya que me aparece minimizado y no es lo que deseo. Asi si va:
Código PHP:
void __fastcall TForm1::OnWMSysCommand(TWMSysCommand &Msg)
{
   
// Minimizando?
   
switch(Msg.CmdType)
   {
      case 
SC_MINIMIZE:
         
// Accion de ocultar el form
         
SysTrayIcon1->Minimize();
         break;

      default:
         
// comportamiento estandard
         
DefaultHandler(&Msg);
   }

Aunque no se como solucionar este warning que me muestra:
Código:
[C++ Warning] Main.h(82): W8027 Functions containing switch are not expanded inline
Es por lo que hay colocado en el protected pero a mi eso que dice es como si me hablara en chino jejeje.
Responder Con Cita
  #8  
Antiguo 28-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
otra cosa ¿Que diferencia hay entre usar DispathMessage y usar DefaultHandler? En ambos casos me funciona perfecto.
Responder Con Cita
  #9  
Antiguo 28-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por aguml Ver Mensaje
Por cierto ecfisa, lo que me indicas no está del todo bien ya que si o si ejecutas la accion por defecto y si yo lo oculto a la icontray y luego ejecuto la accion por defecto es como si no hubiera hecho nada ya que me aparece minimizado y no es lo que deseo. Asi si va:
Es cierto, la verdad es que me interesaba destacar la forma correcta de la declaración y escribí el ejemplo sobre el mensaje sin haberlo probado. Se me escapó ese detalle...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 28-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
He hecho algún pequeño cambio en el componente y ya funciona como esperaba aguml, no hay nuevas propiedades.

Para evitar el cierre de la app y llevarla en segundo plano al Systray sólo tenemos que actuar en el formulario de la siguiente manera:

Código PHP:
void __fastcall TForm1::FormCloseQuery(TObject *Senderbool &CanClose)
{
  
SysTrayIcon1->Visible true;
  
SysTrayIcon1->Hide true;
  
SysTrayIcon1->Minimize();
  
CanClose false;

El enlace de la actualización de TSysTrayIcon lo tienes aquí.

PD/ Ya no es necesario el uso de OnWMSysCommand

Saludos.

Última edición por escafandra fecha: 28-10-2014 a las 20:00:45. Razón: Aclaración OnWMSysCommand
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 con BallonHint Neeruu Varios 1 13-03-2013 13:37:25
Click en minimizar ventana y minimizar aplicacion dmassive Varios 5 16-02-2009 17:01:16
Trayicon en D7 Dado de baja Varios 4 27-12-2008 15:59:36
Trayicon mjjj Varios 2 21-09-2007 00:35:16
Problemas con TRAYICON!! marceloalegre Varios 3 07-06-2005 17:49:07


La franja horaria es GMT +2. Ahora son las 00:25:33.


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