Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-09-2014
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 16
engranaje Va por buen camino
Me ha sucedido algo parecido. Lo cierto es que mi problema en cuestión era que si desde una ventana abria otra y cambiaba la aplicación activa tanto ejecutandola yo por código como el usuario pulsando sobre ella, al volver a mi aplicación la última ventana abierta aparecía minimizada.
Yo por mi parte cuando ser refiere a desarrollos en versiones de delphi antiguos y me pasan temas de este estilo con algunos usuarios y otros no, le echo un vistazo a los cambios en la api de windows para saber en que ha cambiado desde que salió el delphi que estoy utilizando, hasta la versión de dll en cuestión que tiene el usuario. Me temo que el dichoso zorder ha cambiado mas de una vez a lo largo de estos años y una actalización del explorer puede cambiar el modo en el que se comportan la ventanas de una aplicación.
No soy de mucha ayuda pero si pudieras comprueba en tu equipo cuando llamas a otra aplicación y el foco pasa de la tuya a la nueva donde cual es la ventana activa antes de que cambie la aplicación y cual cuando vuelves a ella.
Responder Con Cita
  #2  
Antiguo 16-09-2014
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 19
shoulder Va por buen camino
Minimizar

Hola engranaje por eso decia que el jsingpdf o capicom me desconfiguraba el tema de las ventanas delphi. Ahora estoy probando los aportes de nuestros compañeros del foro.
Responder Con Cita
  #3  
Antiguo 16-09-2014
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 19
shoulder Va por buen camino
Minimizar

Probe lo ejemplos pero no me funciono. Me deja la ventana siempre adelante y los showmessage me quedan atras y se me bloquea todo.
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: 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 shoulder Ver Mensaje
Probe lo ejemplos pero no me funciono. Me deja la ventana siempre adelante y los showmessage me quedan atras y se me bloquea todo.
Ah, pero eso es lógico desde que se fija su estado a fsStayOnTop... Es claro que en ese estado cualquier ventana emergente quedará detrás. Lo único que el código garantiza es que no van a minimizar la ventana.

Yo no encontré otro modo, la combinación de teclado WIN+D por ejemplo, burla hasta un hook de teclado local opción que no soy partidario de usar, pero que también probé.

Sólo te puedo sugerir que si el problema se produce por accion de un usuario, vayas hagas click sobre la barra de tareas de Windows, expliques que el problema no es tu programa sino el usuario y lo cobres caro, pero muuuuy caro. (Eso hará que el dueño (el que paga) le explique al empleado que debe hacer click sobre la barra de tareas la próxima vez que suceda. )

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
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
  #6  
Antiguo 16-09-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 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
  #7  
Antiguo 16-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
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
  #8  
Antiguo 17-09-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.

Si Nelson, entonces sin dudas son las versiones..., tambié lo había mencionado engranaje antes:
Cita:
Empezado por engranaje Ver Mensaje
...Me temo que el dichoso zorder ha cambiado mas de una vez a lo largo de estos años y una actalización del explorer puede cambiar el modo en el que se comportan la ventanas de una aplicación.
...
La experiencia me dice que, cuando los sistemas crecen tienden a la intrusión, ya bastantes problemas trae hacer un programa que realice bién y de forma eficiente las taréas para las que fué diseñado, para cargarse mas piedras a la espalda...

Es por eso que le sugerí a shoulder que se haga cargo sólo de los inconveniente generados por su aplicacion, no de los provocados por otra o el SO. De otro modo terminaremos diseñando el sistema, programándolo, manteniéndolo y encima tenemos que hacer docencia capacitando el personal y si le das pié al empresario, no dudes que hasta especialista en seguridad informática y por que nó, de técnico de hardware.

Es indispensable hacer responsablemente nuestro trabajo, pero también lo es poner en claro los límites del mismo. Y si un empresario tiene un empleado opa, que pague por su capacitación o lo cambie por uno capacitado. Vamos... Que hacer un click sobre la barra de tareas de windows no es una actividad tan compleja...

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 17-09-2014 a las 03:56:23.
Responder Con Cita
  #9  
Antiguo 17-09-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 28
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Esto me parece muy bizarro.

El problema es que la app se congela. No es un problema que se minimizer. Es odioso cuando una app no funciona acorde a como debe funcionar de acuerdo a su OS.

No hay razon para negar minimizar una app.

Ademas: Un problema no se arregla atacando sintomas, sino causas. Están desgastandose con un montón de cosas (que ademas van en contra de como se supone que funciona una app en windows) y no se a respondido la ? fundamental: Porque pasa esto?
__________________
El malabarista.
Responder Con Cita
  #10  
Antiguo 17-09-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 mamcx.

Primero que nada te aclaro que estoy casi totalmente de acuerdo con lo que expones en tu mensaje, pero:
Cita:
Empezado por mamcx Ver Mensaje
El problema es que la app se congela.
La consulta inicial de shoulder fue:
Cita:
Empezado por shoulder Ver Mensaje
A veces me llaman los usuarios que se les bloqueo el programa, pero no es asi, la ventana Hijo aparece minimizada, voy hago click sobre la barra de tareas de Windows y aparece, no sucede siempre cada tanto y en forma aleatoria. Que puede ser?.
Como verás no sólo no menciona nada hacerca de bloqueo o congelamiento, sino que afirma lo contrario.

Cita:
Empezado por mamcx Ver Mensaje
Un problema no se arregla atacando sintomas
En mi primera respuesta, aunque de forma indirecta, coincido con lo que expones:
Cita:
Empezado por ecfisa Ver Mensaje
Es muy difícil poder inferir la causa con esa información,...
...
Si bién no revela el orígen del comportamiento, podría ser una solución transitoria hasta que encuentres el motivo.
Cita:
Empezado por mamcx Ver Mensaje
No hay razon para negar minimizar una app.
También de acuerdo, como lo expresé aquí:
Cita:
Empezado por ecfisa Ver Mensaje
Es por eso que le sugerí a shoulder que se haga cargo sólo de los inconveniente generados por su aplicacion, no de los provocados por otra o el SO.
...
Vamos... Que hacer un click sobre la barra de tareas de windows no es una actividad tan compleja...
Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 17-09-2014 a las 06:17:38. Razón: ortografía
Responder Con Cita
  #11  
Antiguo 17-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Daniel,

Cita:
Empezado por ecfisa
...Que hacer un click sobre la barra de tareas de Windows no es una actividad tan compleja...


Nelson.
Responder Con Cita
  #12  
Antiguo 17-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
mamcx,

Cita:
Empezado por mamcx
...Un problema no se arregla atacando síntomas, sino causas...no se a respondido la pregunta fundamental: ¿Porque pasa esto?...
Es correcto , sin embargo en ITIL (Information Technology Infrastructure Library) existe la opción de workarouds:

Cita:
Empezado por ITIL Service Operation > Problem Management

Workarounds are temporary solutions aimed at reducing or eliminating the impact of Known Errors (and thus Problems) for which a full resolution is not yet available. As such, Workarounds are often applied to reduce the impact of Incidents or Problems if their underlying causes cannot be readily identified or removed.

Tomado de : ITIL Glossary/ ITIL Terms W
Todo lo sugerido en este hilo es una workaround al problema conocido, hasta que se identifique la causa raíz del mismo y se de una solución definitiva a este problema, descrito en el Msg #1

Nelson.

Última edición por nlsgarcia fecha: 17-09-2014 a las 07:53:37.
Responder Con Cita
  #13  
Antiguo 17-09-2014
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 16
engranaje Va por buen camino
Por intentar aportar algo os cuento mi opinión,corregidme si me equivoco o no estoy entendiendo algo.

Cuando una aplicación desarrollada en delphi crea ventanas y las muestra al final lo que hace es utilizar la vcl que realmente encapsula la api de windows. Lo que sucede realmente es que utilizando la api crea ventanas y le dice al sistema a que aplicación pertenece y en que orden se muestra dentro de la aplicación.
La cosa puede ser algo mas complejo porque puede darse el caso de que se este mostrando una ventana por encima del resto sin que realmente esta sea la activa, esto puede darse por ejemplo en procesos largos en los que decida mostrarse un form que se vaya actualizando para mostrar cierta información en cada iteración del bucle que realmente se esta actualizando en el form desde el que se llama. Yo he de confesar que hago esto en algunas ocasiones y para evitar este tipo de problemas suelo utilizar DisableTaskWindows y EnableTaskWindows para hacer la ventana que muestra información pseudomodal de modo que permita continuar el proceso desde el que se muestra pero desactive el resto de mensajes.

He de confesar que en ocasiones al crear formularios lo he hecho alegremente sin prestar demasiada atención al parent y al owner del form que se creaba, esto también me ha dado quebraderos de cabeza con el zorder, Lo que suelo hacer ahora y me ha evitado gran parte de ellos es crear los forms cuando sea posible con el form desde el que se llaman como owner y parent , y no con application o nil.

El so tiene un sistema para saber cual es la aplicación activa y para organizar el orden de cada una de las aplicaciones visuales que se estan ejecutando (para saber cual se muestra sobre cual) y a su vez otro para saber para cada aplicación cual es la ventana activa y en que orden se muestran todas esas ventanas. Ese sistema es el que microsoft ha ido cambiando a lo largo de los años esto cambios pueden dar como resultado el comportamiento distinto de la aplicación, ya digo según la versión de la dll que se tenga.

En este caso en particular el problema parece suceder cuando la aplicación pasa a estar inactiva (porque se active otra). Aqui vuelvo a poner una curiosidad, En alguna ocasión me tiene sucedido algo similar cuando desde mi aplicación se pasaba a una aplicación office (word,excel...) y despues volvia a ella, sin embargo todo iba correctametne, cuando alternaba entre mi aplicación y el bloc de notas o el oppen office. Si no me equivoco al volver a activarse la aplicación el so revisa el orden de las ventanas que le consta y activa también la ventana que le consta. En este punto es donde yo creo que esta el problema, es posible que en este punto el so decida que una ventana inactiva se muestre por encima de la activa, igual y dependiendo de la ventana con el teclado o con el traer al frente del administrador de tareas se puede salir del apuro, pero desde luego no con el ratón.

Mi recomendación es comprobar la versión de la User32.dll del cliente en que sucede esto y compararla con la versión de la misma dll de otro cliente en la que no suceda, despues toca revisar la msdn para comprobar si ha habido modificaciones y cuales han sido y tomar las medidas pertinentes.

Última edición por engranaje fecha: 17-09-2014 a las 10:37:02.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 Dado de baja 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 02:10:02.


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