Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Showmessage minimizado (https://www.clubdelphi.com/foros/showthread.php?t=86356)

shoulder 24-07-2014 19:29:56

Showmessage minimizado
 
Hola porque algunas veces al usuario le sale la ventana showmessage minimizada y me llama que el sistema esta bloqueado, cuando miro es que solo esta minimizada, hay alguna forma de evitar esto?.
Gracias.

Casimiro Noteví 24-07-2014 21:42:15

Un poco difícil contestar sin ver nada de código :rolleyes:

shoulder 24-07-2014 21:56:28

Showmessage
 
Hola, a veces pasa no siempre y los lineas son asi..

Cita:

if error = 0 then
begin
showmessage('PDF FIRMADO');
Mylabel3d17.Caption := 'Primera Firma Asignada';
Iaeverbutton12.Enabled := False;
end;

a veces el mensaje sale minimizado y me llaman que se bloqueo el sistema, voy a la barra de tareas y el mensaje se encuentra ahi minimizado hago click doy aceptar y sigue funcionando bien.
Gracias.

engranaje 28-07-2014 09:33:43

Estaría bien saber que versión de delphi utizas y que sistema operativo estas utiilzando. Con versiones antiguas de delphi hablo de delphi 2.0 o delphi 5.0 puede pasar que los showmessages y otras ventanas de la aplicación queden por por detras de ventanas modales o minimizadas en algunos so y funcionen correctamente en otros. Por experiencias propias tiene que ver mas con las versiones de algunas dll, el funcionamiento de la api de windows sobre todo en lo que se refiere al Z order ha cambiado ya algunas veces durante estos años.
No es lo mismo que esto te pase utilizando xe6 y lanzando el ejecutable en un windows 8.1 que compilando en delphi 5.0 y ejecutando en un xp sp3.

shoulder 29-07-2014 17:56:31

Showmessage
 
Muchas Gracias por tu respuesta

Delphi 7 Build 4.453
Windows 7 32 bits.

No pasa siempre, es como dices, hay veces que la ventana se va para atras o se ve minimizada

ecfisa 29-07-2014 21:05:31

Hola shoulder.

Es realmente extraño, hasta ahora no había escuchado ese comportamiento de ShowMessage con Delphi 7.

Pero a decir verdad, nunca uso el procedimiento ShowMessage sino la función API MessageBox y jamás me ha dado problema alguno.

El cambio no es grande, a modo de ejemplo:
Código Delphi [-]
  MessageBox(0, 'PDF FIRMADO', '', MB_OK);

Saludos :)

shoulder 29-07-2014 21:59:00

Showmessage
 
Gracias lo voy a probar.

nlsgarcia 29-07-2014 22:53:55

shoulder,

Cita:

Empezado por shoulder
...algunas veces al usuario le sale la ventana ShowMessage minimizada...¿hay alguna forma de evitar esto?...

:rolleyes:

Revisa este código:
Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 var
    MsgDialog : TForm;
    MsgUser : String;
 begin
    MsgUser := 'Mensaje al Usuario';
    MsgDialog := CreateMessageDialog(MsgUser, mtWarning, [mbYes, mbNo]);
    MsgDialog.FormStyle := fsStayOnTop;
    MsgDialog.ShowModal;
 end;
El código anterior en Delphi 7 bajo Windows 7 Professional x32, muestra un mensaje modal al usuario por medio del la función CreateMessageDialog, que estará al tope del Z Order y permitirá configurar su visualización según los requerimientos de la aplicación.

Una forma más simple de mensajes al usuario se puede logra por medio del siguiente código:
Código Delphi [-]
 procedure TForm1.Button2Click(Sender: TObject);
 var
    MsgUser : String;
 begin
    MsgUser := 'Mensaje al Usuario';
    MessageDlg(MsgUser,mtInformation,[mbOK],0)
 end;
El código anterior en Delphi 7 bajo Windows 7 Professional x32, muestra un mensaje al usuario por medio de la función MessageDlg.

Espero sea útil :)

Nelson.

shoulder 15-09-2014 20:53:33

Ventana Minimizada
 
Trabajo con Windows 7 - Delphi 7.

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?.

uso Form Común
Position : PoScreenCenter
PrintScale : Poproportional

Gracias.

ecfisa 16-09-2014 00:39:27

Hola shoulder.

Es muy difícil poder inferir la causa con esa información, pero este código tendría que impedir que un form se minimize:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
  private
    procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;
  public
  end;

...

procedure TForm1.WMSysCommand(var Msg: TMessage);
begin
  if Msg.WParam <> SC_MINIMIZE then
    inherited;
end;
Si bién no revela el orígen del comportamiento, podría ser una solución transitoria hasta que encuentres el motivo.

Saludos :)

nlsgarcia 16-09-2014 01:14:42

shoulder,

Cita:

...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?...
Quizás la respuesta más simple sea : El usuario :rolleyes:

Revisa este código:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
   BorderIcons := BorderIcons - [biMinimize];
end;
El código anterior en Delphi 7 bajo Windows 7 Professional x32, deshabilita la opción de minimizar el formulario Form1.

Espero sea útil :)

Nelson.

TiammatMX 16-09-2014 01:55:47

Cita:

Empezado por nlsgarcia (Mensaje 481540)
...Quizás la respuesta más simple sea : El usuario :rolleyes:...

En desacuerdo con nlsgarcía..., la respuesta más simple ES PROBLEMA, CULPA Y RESPONSABILIDAD DEL USUARIO..., siguiendo la máxima que define a la Ley de Murphy, colofón de sistemas: "Si tu aplicación tiene problemas insolublemente aleatorios, otro tiene la culpa", y es por eso que tienes que pensar como usuario curioso y preparar tus aplicaciones PARA CUALQUIER EVENTUALIDAD.

ecfisa 16-09-2014 02:41:22

Hola.

Pude comprobar que las opciones de los mensaje #2 y #3 fallan con combinaciones de teclas como WIN + D que hacen que el form se minimize. (Y debe ser algo como eso lo que están haciendo...)

Pero complementándo cualquiera de ellas con este código, creo que te va a resolver el problema:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  FormStyle:= fsStayOnTop; // o desde el Obj. Insp.
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  SetwindowLong(GetWindow(Handle, GW_OWNER), GWL_STYLE, 0);
  SetwindowLong(GetWindow(Handle, GW_OWNER), GWL_EXSTYLE, 0);
  OnShow:= nil;
end;
Probalo y nos comentas.

Saludos :)

shoulder 16-09-2014 02:53:49

Minimizar
 
Mañana lo pruebo, les comento cuando se vuelve, digo medio loco el delphi....cuando no se borra el historial de los tokens de firma digital te aparece minimizado en java el boton de cancelar, le das click y despues con la clave sigue el prg, pero a partir de ahi algunas veces las ventanas forms se minimizan.

2) Yo desde el `programa creo reportes excel o word y tambien despues de eso puede pasar que el form se minimice. Y el usuario me llama y me dice se bloqueo el sistema.

De seguro como siempre las sugerencias de ustedes funcionan. Pero hay algo entre delphi 7 y windows 7 que con el uso de capicom (firma digital, jsignpdf o librerias de word o excel es como que lo desconfiguran, no siempre aclaro pero hace esas cosas extrañas de minimizar o queda atras de la ventana menu).

Gracias como siempre.

engranaje 16-09-2014 12:26:58

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.

shoulder 16-09-2014 14:51:38

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.

shoulder 16-09-2014 16:45:08

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.

ecfisa 16-09-2014 17:21:00

Cita:

Empezado por shoulder (Mensaje 481576)
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. :D)

Saludos :)

nlsgarcia 16-09-2014 21:48:34

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...

:rolleyes:

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.

ecfisa 16-09-2014 22:29:42

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... :D

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

nlsgarcia 16-09-2014 23:33:44

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...

:confused:

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

Saludos :)

Nelson.

ecfisa 16-09-2014 23:59:28

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ó :D)

shoulder 17-09-2014 01:11:51

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');

nlsgarcia 17-09-2014 01:12:37

Daniel

Cita:

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

:rolleyes:

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

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.

ecfisa 17-09-2014 03:39:35

Hola.

Si Nelson, entonces sin dudas son las versiones..., tambié lo había mencionado engranaje antes:
Cita:

Empezado por engranaje (Mensaje 481559)
...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 :)

mamcx 17-09-2014 04:18:08

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?

ecfisa 17-09-2014 05:11:47

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 (Mensaje 481610)
El problema es que la app se congela.

La consulta inicial de shoulder fue:
Cita:

Empezado por shoulder (Mensaje 481515)
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 (Mensaje 481610)
Un problema no se arregla atacando sintomas

En mi primera respuesta, aunque de forma indirecta, coincido con lo que expones:
Cita:

Empezado por ecfisa (Mensaje 481539)
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 (Mensaje 481610)
No hay razon para negar minimizar una app.

También de acuerdo, como lo expresé aquí:
Cita:

Empezado por ecfisa (Mensaje 481609)
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 :)

nlsgarcia 17-09-2014 06:39:27

Daniel,

Cita:

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

:D ^\||/

Nelson.

nlsgarcia 17-09-2014 07:46:34

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

Nelson.

engranaje 17-09-2014 10:31:29

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.

ecfisa 17-09-2014 11:44:03

Hola engranaje.

Sumado a las pruebas que han realizado, lo que planteas no es incoherente y considero muy probable que por ahí pase tanto el comportamiento como el encausamiento del mismo.

Pero lo que yo me cuestiono es: ¿ Debe mi programa reaccionar de modo diferente al resto de las aplicaciones que corren en un equipo ?, por que ante WIN+D, el efecto se produce hasta con el mismísimo Símbolo del sistema...

Con esto apunto (siempre que la situación se produzca por una combinación de teclas), a que creo mas simple explicar una vez que la cosa es así para todo programa que trabaje en ese equipo, que alterar el normal comportamiento del S.O. Es más, estoy convencido que con tiempo se acostumbrarán a esa conducta y la que terminará dando la nota disonante será nuestra aplicación.

shoulder comenta en el mensaje #1, que con sólo hacer acto de presencia + un click en la barra de tareas, se restaura la aplicación funcionando normalmente (tál como se esperaría de cualquier otra). ¿ Tán difícil es para el empleado hacer lo mismo ?

Y por supuesto, no descarto, que yo haya entendido mal la consulta planteada en el orígen del hilo y el problema sea otro...

Saludos :)

shoulder 17-09-2014 15:37:57

Minimizar
 
Ecfisa entendiste perfecto, el programa no se bloquea simplemente hacen un click en la barra de tareas y aparece la ventanita de showmessage, msg o form hijo y prosigue normalmente. Lo que te aseguro que pasa esto cuando lee el token de firma digital despues del java donde te sale para poner clave de firma digital ahi comienza el delphi a hacer estas cosas extrañas. En forma aleatoria a veces pasa tambien me parece que es despues de usar los active del word.

Se que con un click se soluciona, pero me llaman y me dicen se bloqueooo, busque y no encuentro manera despues de la ventana propia del Token o firma digital como recomponer esto. Me comenzo esto con windows 7.
Gracias

nlsgarcia 17-09-2014 17:41:59

shoulder,
Cita:

Empezado por shoulder
...hay algo entre Delphi 7 y Windows 7 que con el uso de CAPICOM, JSignPdf o librerías de Word o Excel es como que lo desconfiguran...

Cita:

Empezado por shoulder
...te aseguro que pasa esto cuando lee el token de firma digital después del java donde te sale para poner clave de firma digital ahí comienza el Delphi a hacer estas cosas extrañas...En forma aleatoria a veces pasa también me parece que es después de usar los Active del Word...no encuentro manera después de la ventana propia del Token o firma digital como recomponer esto...Me comenzó esto con Windows 7...

:rolleyes:

Pregunto:

1- ¿Con que versión de Windows, no se presento el problema descrito?.

2- ¿El problema descrito, se presenta en todas las máquinas que utilizan la aplicación de Delphi en cuestión?.

3- ¿Todas las máquinas en donde se presenta el problema, usan la aplicaciones CAPICOM, JSignPdf, Word y/o Excel?.

Espero sea útil :)

Nelson.

shoulder 17-09-2014 18:50:22

Minimizar
 
Hola la implementacion la hice con windows 7, antes programe con XP y en mi PC no me pasaba ahora si me pasa con W7.
Todos tienen Windows 7
Todos usan capicom y Jsingn.

nlsgarcia 17-09-2014 22:21:07

shoulder,

Cita:

Empezado por shoulder
...antes programe con Windows XP y en mi PC no me pasaba ahora si me pasa con Windows 7...Todos tienen Windows 7, CAPICOM y JSignPdf...

:rolleyes:

Pregunto:

1- ¿El programa en Delphi en cuestión, es exactamente el mismo que en Windows XP o a sido modificado en Windows 7?, ¿Cual es la función del programa en Delphi?.

2- ¿La versión de CAPICOM y JSignPdf, es las misma que en Windows XP o es una nueva versión?.

3- ¿Cual es la versión de CAPICOM y JSignPdf que usan actualmente?, ¿Es la misma en todas las máquinas?.

4- ¿Todas las máquinas que usan el programa en Delphi, CAPICOM y JSignPdf fallan aleatoriamente?.

Espero sea útil :)

Nelson.

shoulder 18-09-2014 03:06:52

Minimizar
 
1) El programa es el mismo, nada mas que la implementacion la hice sobre W7, antes en mi pc tenia xp y me migraron tambien a w7 32 bits, pero los usuarios trabajan en w7 64 bits.
2) el programa en una parte firma documentaciones varias.
3)las versiones son siempre las mismas
4) Fallan aleatoriamente todas

Ejemplo : secuencia Normal: Menu - Form1 -ventana Java de pedido de clave - showmessage o msg.
La primera vez lo hace bien, cuando firmo un segundo documento el showmessage me lo muestra asi.
secuencia : Form1 - Menu -Showmessage o directamente el showmessage o form1 minimizado.

nlsgarcia 18-09-2014 03:44:53

shoulder,

Cita:

Empezado por shoulder
...las versiones son siempre las mismas (CAPICOM y JSignPdf)...

:rolleyes:

Pregunto:

1- ¿Cual es la versión de CAPICOM y JSignPdf que usan actualmente?, ¿Estos programas se usan en conjunto?.

2- ¿Has probado usar una versión diferente de CAPICOM y JSignPdf para verificar si el error persiste?.

3- ¿El error ocurre por igual en Windows 7 x32 y x64?.

4- ¿El programa de firmas digitales
JSignPdf, es llamado desde el programa en Delphi?, ¿Puedes publicar el código?.

Espero sea útil :)

Nelson.

shoulder 18-09-2014 18:36:11

El error da en cualquier version de w7. Jsingpdf 1.4.5 - capicom 1.0.1.32
Código Delphi [-]
function ExecuteProcess(ProcessName: String): Cardinal;
var
   StartInfo: TStartupInfo;
   ProcInfo: TProcessInformation;

begin
   Result := 0;

   FillChar(StartInfo, SizeOf(StartInfo), 0);
   StartInfo.cb := SizeOf(StartInfo);
   StartInfo.dwFlags := STARTF_USESHOWWINDOW;
   StartInfo.wShowWindow := SW_SHOWMINIMIZED;
   if CreateProcess(nil, PChar(ProcessName), nil, nil, false, 0, nil, nil, StartInfo, ProcInfo) then
      Result := ProcInfo.hProcess;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

   lsCertificados.Clear;

   carpetaAlmacen := CoStore.Create;
   carpetaAlmacen.Open(CAPICOM_CURRENT_USER_STORE,
                       CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED or
                       CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED or
                       CAPICOM_STORE_OPEN_EXISTING_ONLY);

   certificadosAlmacen := carpetaAlmacen.Certificates as ICertificates2;

   // (chequeo datos de la tarjeta)
   // uso el jsign
   arch := ..nombre del archivo a firmar...
   //firma digital
   ejecuta := ' -jar  "C:\Archivos de programa\JSignPdf\JSignPdf.jar"  '
              + '"' + arch + '"' + ' --out-directory c:\firmar\ -a -kst  WINDOWS-MY '
              + ' --l2-text "Datos del firmante '+ firma + '"'
              + ' -urx 500 -ury 590 -llx 250 -lly 500 --visible-signature '
              + ' -pg 1 --render-mode SIGNAME_AND_DESCRIPTION --font-size 8 '
              + ' --out-suffix "_terminado" -pr  DISALLOW_PRINTING --quiet';


   Process := ExecuteProcess('C:\Archivos de programa\JSignPdf\jre\bin\javaw.exe' + pchar(ejecuta));
   if Process <> 0 then
      WaitForSingleObject(Process, INFINITE);

   MsgUser := 'PDF Firmado';
   MessageDlg(MsgUser,mtInformation,[mbOK],0);

end;

Casimiro Noteví 18-09-2014 21:16:59

Cita:

Empezado por gdlrinfo (Mensaje 481709)
...

Por favor, crea un hilo nuevo sobre ese tema, ya que no es ningún aporte para solucionar el problema que inició este hilo.
Gracias.

gdlrinfo 18-09-2014 21:27:07

Cita:

Empezado por Casimiro Notevi (Mensaje 481710)
Por favor, crea un hilo nuevo sobre ese tema, ya que no es ningún aporte para solucionar el problema que inició este hilo.
Gracias.

OK disculpas !!!!! Y gracias!!!


La franja horaria es GMT +2. Ahora son las 14:18:41.

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