Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Evento OnMinimize del formulario (https://www.clubdelphi.com/foros/showthread.php?t=80896)

Neftali [Germán.Estévez] 28-01-2009 11:24:43

Evento OnMinimize del formulario
 
Los formularios de Delphi no tienen el evento OnMinimize.
A veces estaría bien disponer de él; En mi caso lo necesitaría ya que a veces doto a mis aplicaciones de la caraterística (o manía mía) de que al minimizarlos "pasan al Tray"; Es decir, oculto el form y visualizo el icono junto al reloj.

Una forma sencilla de detectarlo es hacer lo siguiente.
En la sección private del form añadir esta definición:

Código Delphi [-]
  // Capturar mensajes al form
  procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;

Y en la implementación se captura el mensaje de minimizar:

Código Delphi [-]
// Capturar mensajes....
procedure TFormMain.WMSysCommand(var Msg: TWMSysCommand);
begin
  // Minimizando?
  if (Msg.CmdType = SC_MINIMIZE) then begin
    // Accion de ocultar el form
    actionOcultar.Execute;
  end
  else begin
    // comportamiento estandard
    DefaultHandler(Msg);
  end;
end;

¡Ojo! En mi caso no me interesa que el formulario se minimize, ya que yo lo oculto, pero si os interesa que esa acción se realice, debéis sacar fuera del else la llamada a
DefaultHandler(Msg)


P.D: Funciona con el botón de minimizar y desde el menú de sistema del form, pero no pulsando click derecho sobre el botón de la barra de tareas. (Cuando lo encuentre lo añado).

ingabraham 06-02-2009 23:58:43

actionOcultar.Execute;
no me reconoce este codigo, necesito alguna uses

Neftali [Germán.Estévez] 09-02-2009 10:44:34

No. Esa es simplemente una Action que yo tengo para ocultar el form. En ese punto puedes añadir el código que necesites.

En mi caso tengo esa Action definida como:

Código Delphi [-]
AnimateWindow(FormMain.Handle, 600, AW_SLIDE or AW_HIDE or AW_BLEND);
  FormMain.Hide;

Pero si deseas hacer otra csa, puedes poner cualquier otro código.

Nasca 15-12-2009 18:07:51

Neftalí he adaptado la idea para algo que tenía pendiente y parece funcionar pulsando en la barra. En Delphi 7 sobre XP.

Código Delphi [-]
procedure SysCommand(var Msg: TMessage); message wm_SysCommand;

procedure TfMain.SysCommand(var Msg: TMessage);
begin
  {salvo el cerrar}
  if Msg.wParam = sc_Close then
     dmdatos.fdmdatos.acCerrarApp.Execute
   else
     begin
       if Msg.wParam = SC_MINIMIZE then
          Application.Minimize
         else
          inherited; {para tratar los mensajes como habitualmente};
     end;
end;

Greco 18-07-2010 23:24:22

hace ya bastante tiempo necesitaba algo parecido, gracias a la ayuda de alguien que no recuerdo, ahora utilizo el componente ApplicationEvents que viene en la paleta Additional y dispone de un evento OnMinimize, entre otros.

waly2k1 26-07-2010 11:10:38

Estoy buscando algo parecido, pero recien ingreso asi q no pregunto nada y lo busco primero, si no encuentro lo que busco recién pregunto hehe. El tema es que el minimize en Win7 no siempre funciona y se pierde la aplicación, desaparece de la lista del admninistrador de tareas, se lo ve en la solapa servicios, pero ho hay forma de restaurarlo. Con lo cual hay que finalizar la aplicación y reiniciarla.
Y todo esto para un usuario final resulta una tarea un poco engorrosa, ya que pagóoooo por algo que funcione.
Saludos!
Walter


La franja horaria es GMT +2. Ahora son las 15:04:47.

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