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


La franja horaria es GMT +2. Ahora son las 21:07:21.

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