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 16-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
shoulder,

Cita:
Empezado por shoulder
...cada tanto y en forma aleatoria...la ventana Hijo aparece minimizada...hago click sobre la barra de tareas de Windows y aparece...¿Que puede ser?...
Cita:
Empezado por shoulder
...Probé lo ejemplos pero no me funciono...deja la ventana siempre adelante...se me bloquea todo...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   FormStyle := fsNormal;
end;

procedure TForm1.Timer1Timer;
begin
   if not Application.Active then
      Application.Restore;

   if WindowState = wsMinimized then
      WindowState := wsNormal;

   if not Visible then
      Visible := True;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, impide que el formulario Form1 sea minimizado por:

1- Botón de minimizar en el formulario.

2- Combinación de teclas : Windows + D

3- Funciones : SendMessage, PostMessage, Perform y ShowWindow.

En resumen : El formulario no puede ser minimizado manualmente o programáticamente y no se coloca al tope del Z-Order, por lo cual no interfiere con los mensajes de la aplicación.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 16-09-2014 a las 21:51:51.
Responder Con Cita
  #2  
Antiguo 16-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 Nelson.

Si yo había probado chequear el estado mediante un timer. Pero adolece del defecto que no funciona si existe alguna otra ventana modal abierta vg.: ShowMessage, MessageBox, ..., u otro form modal, ya que en ese caso WIN+D minimizará todo.

Agrego un poco de codigo a tu ejemplo para mostrar a lo que me refiero:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

const
  WM_AFTER_SHOW = WM_USER + 301;
  
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    procedure WmAfterShow(var Msg: TMessage); message WM_AFTER_SHOW;
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   FormStyle := fsNormal;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    if not Application.Active then
      Application.Restore;

   if WindowState = wsMinimized then
      WindowState := wsNormal;

   if not Visible then
      Visible := True;
end;

procedure TForm1.WmAfterShow(var Msg: TMessage);
begin
 ShowMessage('Presiona WIN + D ...')
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   PostMessage(Self.Handle, WM_AFTER_SHOW,0,0);
end;
end.
Yo creo que shoulder tendría que dejar bién claro cuales son los problemas intrínsecos a su aplicación y cuales no. Si no va a terminar escuchando en el teléfono cosas como: "¡ Venga urgente que el programa desapareció misteriosamente !" y resultó ser que el protector de pantalla se había activado...

Si sus empleados son inoperantes, que que hagan un curso del S.O. que estan empleando. Y si no, que vaya, solucione el problema y lo cobre como corresponde...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 16-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Daniel,

Cita:
Empezado por ecfisa
...había probado chequear el estado mediante un Timer. Pero adolece del defecto que no funciona si existe alguna otra ventana modal abierta...


Probé lo que comentas en el Msg #12 en el siguiente código, funcionado correctamente en todos los casos de prueba:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

const
  WM_AFTER_SHOW = WM_USER + 301;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
    procedure WmAfterShow(var Msg: TMessage); message WM_AFTER_SHOW;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Inicializa el formulario como Normal
procedure TForm1.FormCreate(Sender: TObject);
begin
   FormStyle := fsNormal;
end;

// Procesa el mensaje de usuario WM_AFTER_SHOW
procedure TForm1.WmAfterShow(var Msg: TMessage);
begin
   ShowMessage('Presiona WIN + D ...')
end;

// Impide que el formulario sea minimizado manualmente o programáticamente
procedure TForm1.Timer1Timer;
begin
   if not Application.Active then
      Application.Restore;

   if WindowState = wsMinimized then
      WindowState := wsNormal;

   if not Visible then
      Visible := True;
end;

// Caso de Prueba 1 : Windows + D
procedure TForm1.FormShow(Sender: TObject);
begin
   PostMessage(Self.Handle, WM_AFTER_SHOW,0,0);
end;

// Caso de Prueba 2 : Windows + D
procedure TForm1.Button1Click(Sender: TObject);
var
   MsgDialog : TForm;
   MsgUser : String;

begin

   MsgUser := 'Mensaje al Usuario';
   MsgDialog := CreateMessageDialog(MsgUser, mtWarning, [mbOk]) ;
   MsgDialog.FormStyle := fsStayOnTop;
   MsgDialog.ShowModal;

   ShowMessage(MsgUser);

   MessageDlg(MsgUser,mtInformation,[mbOK],0);

   Application.MessageBox(PChar(MsgUser), PChar(Application.Title), MB_OK + MB_ICONINFORMATION);

   MessageBox(Handle, PChar(MsgUser), PChar(Application.Title), MB_OK + MB_ICONINFORMATION);

end;

// Caso de Prueba 3 : Windows + D
procedure TForm1.Button2Click(Sender: TObject);
begin
   PostMessage(Self.Handle, WM_AFTER_SHOW,0,0);
end;

// Caso de Prueba 4 : Minimize
procedure TForm1.Button3Click(Sender: TObject);
begin
   SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;

// Caso de Prueba 5 : Minimize
procedure TForm1.Button4Click(Sender: TObject);
begin
   PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;

// Caso de Prueba 6 : Minimize
procedure TForm1.Button5Click(Sender: TObject);
begin
   Perform(WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;

// Caso de Prueba 7 : Minimize
procedure TForm1.Button6Click(Sender: TObject);
begin
   ShowWindow(Handle, SW_MINIMIZE);
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, impide en todos los casos señalados en el ejemplo que el formulario Form1 sea minimizado.

Pregunto : ¿Que SO tienes instalado?, quizás lo que mencionas este relacionado a la versión de Windows


Saludos

Nelson.

Última edición por nlsgarcia fecha: 16-09-2014 a las 23:37:45.
Responder Con Cita
  #4  
Antiguo 16-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 Nelson.

Tengo Windows 7 32 bits -Ultimate... ¿ Serán las versiones el motivo ?, fijate como se comporta:

Ejecución de Project1.exe:


Luego de WIN + D:

Y así se queda hasta hacer click sobre el ícono o entrar y salir de otra aplicación.

Yo lo atribuí a la pérdida del foco cuando se llama a una ventana modal, pero puedo estar equivocado y la diferencia de comportamiento este dada por la versión de windows.

Si pensas que los archivos fuentes pudieran serte útiles para alguna prueba te los adjunto, pero básicamente es el código que puse antes.

Saludos

Edito: (el fondo de escritorio es de W8 pero está allí por que me gustó )
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 17-09-2014
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Minimizar

Hola en la empresa tienen Windows 7 64 bits -. y programo en Tengo Windows 7 32 bits -.. Exactamente me pasa como el ejemplo anterior igual.
El usuario no hace nada, cuando pido clave por java con el jsingpdf sea el showmessage o el msg aparece minimizado en forma aleatoria bastante seguido o me queda el menu adelante y el form hijo atras y el msg minimizado. Tambien a a veces pasa cuando usan el word pero ahi no se si por error aprietan la tecla windows. Lo que es seguro que por Jsigndpdf me desconfigura el delphi se comportan en forma erraticas las ventanas. Ejemplo envio un mensaje ' El Archivo fue firmado digitalmente'. Pero les aparece minimizado y me llaman que se bloqueo todo.
Envio Ejemplo

Cita:
archivo := 'c:\pdf\'+ edit1.Text;


Primero := ' -jar "C:\Archivos de programa\JSignPdf\JSignPdf.jar" '+ '"'+ archivo+'.pdf' + '"' + ' --out-directory c:\pdf\ -kst WINDOWS-MY ' +' --certification-level CERTIFIED_NO_CHANGES_ALLOWED --l2-text "Firmado" -urx 600 -ury 50 -llx 90 --visible-signature ' +
' -pg 1 --render-mode SIGNAME_AND_DESCRIPTION --font-size 16 ' +' --out-suffix "_Firmado" -pr DISALLOW_PRINTING --quiet';

ShellExecute(Handle, 'open', 'C:\Archivos de programa\JSignPdf\jre\bin\javaw.exe',pchar(primero),nil, SW_SHOWNORMAL);
.....(comprobacion si el archivo tiene mas de cero bytes si existe...
showmessage('Archivo Firmado');
Responder Con Cita
  #6  
Antiguo 17-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Daniel

Cita:
Empezado por ecfisa
...¿ Serán las versiones el motivo ?...


Revisa estas imágenes en Windows 8.1 Professional x32 :

Antes de la combinación de teclas : Windows + D



Despues de la combinación de teclas : Windows + D



La prueba anterior fue realizada análogamente en:

1- VM con Windows XP Professional x32 SP3.

2- VM con Windows 7 Professional x32 sin Service Pack.

3- VM con Windows 7 Professional x64 SP1.

El resultado en todos los casos anteriores, fue el mismo que describen las imágenes de Windows 8.1 Professional x32 y el Msg #12, luego ¿Por que funciona en mi Máquina Física con Windows 7 Profesional x32 SP1 y no en los casos señalados?, solo puedo suponer como variable que esta máquina esta al día con todos los Security Updates de Microsoft, situación que no ocurre con las máquinas virtuales de pruebas anteriores, quizás esto influya en los resultados vistos hasta ahora

Conclusión : A pesar de los resultados obtenidos, considero que es mejor opción implementar el código del Msg #11, dado que en el caso, de que no funcione con la combinación de teclas Windows + D, aun impedirá el resto de las posibilidades y esto dejara como opción más probable en caso de repetirse el evento, la intervención del usuario.

Saludos

Nelson.

Última edición por nlsgarcia fecha: 17-09-2014 a las 01:16:17.
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
cronometro minimizado kurono Varios 3 22-01-2009 06:42:14
Arranque minimizado Cecilio Varios 2 25-06-2008 11:54:59
Minimizado de Formularios Michel Varios 0 16-08-2003 00:00:16
Restaurar un report minimizado MANU1102 Impresión 4 04-08-2003 14:41:27


La franja horaria es GMT +2. Ahora son las 20:01:22.


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