PDA

Ver la Versión Completa : Evento OnMinimize del formulario


Neftali [Germán.Estévez]
28-01-2009, 11:24:43
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:


// Capturar mensajes al form
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;


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


// 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:


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.


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