Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Problema al minimizar (https://www.clubdelphi.com/foros/showthread.php?t=58729)

RaulChemical 30-07-2008 09:45:35

Problema al minimizar
 
Hola a todos...

Desde hace un tiempo me encargo de una aplicación que se minimiza al lado del reloj.
Usa un TApplicationEvents con sus eventos minimize y restore para minimizar y restaurar el mainform y un TTrayIcon para controlar el click y restaurar.

Todo funciona mas o menos bien hasta que, teniendo la ventana en pantalla, pulsamos windows+D o Windows+M.

Con windows+D la aplicacion se minimiza y se me queda la tarea en la barra de tareas y por mucho que hagas click sobre ella, no se restaura. Hay que pulsar botón derecho y cerrar para que desaparezca.

Con Windows+M la aplicación no hace nada, no se minimiza ni se oculta ni nada.

En el WMSysCommand tengo esto:
Código Delphi [-]
procedure TfPrinc.WMSysCommand(var Msg: TWMSysCommand);
begin
  if (Msg.CmdType = SC_MINIMIZE) or (Msg.CmdType = SC_CLOSE) then
  begin
    Application.Minimize;
    fPrinc.hide;
  end
  else if (Msg.CmdType = SC_RESTORE) then
  begin
    Application.MainForm.Hide;
    Application.MainForm.Show;
    application.BringToFront;
    Application.Restore;
  end;
end;

En el TrayiconClick tengo esto:

Código Delphi [-]
procedure TfPrinc.TrayIconClick(Sender: TObject);
begin
  application.restore;
  fPrinc.show;
  application.BringToFront;
end;

Y tengo esto en los AppEvents:
Código Delphi [-]
procedure TfPrinc.AppEventsMinimize(Sender: TObject);
begin
  Application.Minimize;
  fPrinc.hide;
end;

procedure TfPrinc.AppEventsRestore(Sender: TObject);
begin
  application.restore;
  fPrinc.show;
  application.BringToFront;
end;

Se os ocurre algo por lo que no me responda bien a esas combinaciones de teclas?

Muchas gracias.

coso 30-07-2008 16:39:16

Hola, creo que es debido a que en el restores llamas al Hide, por lo que entonces vuelves a enviar un mensaje SC_CLOSE y luego posteriormente, con el show, otro mensaje SC_RESTORE. Vamos, que se te queda bloqueado el funcionamiento recursivamente. Prueba de poner, en vez de

Código Delphi [-]
else if (Msg.CmdType = SC_RESTORE) then
  begin
    Application.MainForm.Hide;
    Application.MainForm.Show;
    application.BringToFront;
    Application.Restore;
  end

tansolo

Código Delphi [-]
else DefaultHandler(Msg);

y vigilar en Appeventsrestore , minimize, si realmente son necesarias. Saludos.

RaulChemical 26-01-2012 10:44:03

Gracias
 
Muchas gracias..

Mas vale tarde que nunca, no?


La franja horaria es GMT +2. Ahora son las 05:15:16.

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