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)
-   -   Qué mensajes lanza internamente MessageDlg? (https://www.clubdelphi.com/foros/showthread.php?t=52227)

cestradar 14-01-2008 21:45:42

Qué mensajes lanza internamente MessageDlg?
 
Hola, les explico el por qué de esa pregunta

Tengo una aplicación que manda a imprimir ciertos archivos en diferentes formatos (jpg, doc, xls y pdf) y funciona bien en la mayoría de las ocaciones, pero a veces, solo a veces algunos archivos PDF no se mandan a la cola de impresión (mandó a imprimir con un shellExecute, por cierto).

Aquí lo extraño del asunto es que muchas veces si se imprimien, solo de forma esporádica y sin aparente relación entre ellos, algunos archivos no llegan nunca a la cola de impresión SALVO si coloco un MessageDlg con algún aviso como "Verifique que se haya impreso correctamente el documento"; con esa interrupción todos los archivos de imprimen bien :). Pero el usuario no quiere ese mensaje :(, por eso mi pregunta ¿qué hace el MessageDlg internamente que permite que se manden los archivos a la cola de impresión?

Y es que el problema es por esto. Debo mandar un correo cuando un archivo no se imprima, para ello despues del método de impresión monitoreo la cola de impresión 5 segundos (es el tiempo que consideré suficiente para mandar a imprimir) y si no llega a la cola el correo de manda; con estos archivos PDF problemáticos el correo siempre de manda pese a que si se imprimieron (durante la interrupción del MessageDlg), ¿me doy a entender?, de nada sirve que espere 10 segundos o 10 minutos por que esos archivos no llegan nunca a la cola, solo hasta que la aplicación sufre una detención como la del MessageDlg, no lo entiendo. Pené que era cosa del acrobat y lo mato por código después de que se imprimen cada uno de los docs pero nada.

¿Alguien puede aconsejarme algo?

Saludos y gracias

cHackAll 14-01-2008 21:52:22

Al titulo del hilo; utiliza la API CreateMessageDialog... pero por que no pruebas tambien con un Application.MessageBox

Y finalmente antes de imprimir por que no pruebas con hacer un Sleep?

Saludos

cestradar 14-01-2008 23:17:04

Cita:

Empezado por cHackAll (Mensaje 258089)
Al titulo del hilo; utiliza la API CreateMessageDialog...

Perdón por tardar en contestarte, pero queria probar tus sugerencias primero.
Pues por alguna razón que aún no entiendo:confused:, ¡ya funcionó!, :eek: agregué el CreateMessageDialog dentro de la función que revisa que el trabajo haya llegado a la cola y ya manda siempre esos pdf's problemáticos, no se que haya internamente el MessageDlg, parece que es solo la creación dinámica de una forma y un release implícito.

Código Delphi [-]
                  repeat
                      Application.ProcessMessages;
                      myDLG := CreateMessageDialog('Revise que el certificado se haya impreso correctamente: '+#10+#13+
                                 'Inspect: '+Inspec+#10+#13+
                                 'Remisión: '+NoRemision, mtWarning, [mbOk]);
                      Pausa(500);
                      BanImpresion := EncuentraTrabajo(Certificado.Name);
                      myDLG.Release;
                  until BanImpresion or (now >= xInicio + (5000/(1000*60*60*24)));
Cita:

Empezado por cHackAll (Mensaje 258089)
pero por que no pruebas tambien con un Application.MessageBox

Lo que necesitaba era ya no mandar ningún mensaje como medio de aseguramiento del envío del archivo a la cola


Cita:

Empezado por cHackAll (Mensaje 258089)
Y finalmente antes de imprimir por que no pruebas con hacer un Sleep?

Hago una especie de sleep en mi rutina Pausa, en realidad es:

Código Delphi [-]
procedure Pausa(MiliSegundos: SmallInt);
var
  vTime: TDateTime;
begin
  vTime := now;
  repeat until (now >= vTime + (Milisegundos/(1000*60*60*24)));
end;

¿acaso sleep hace algo diferente?

Muchas gracias, voy a hacer más pruebas, pero aparentemente ya funciona bien. :)

fide 14-01-2008 23:40:18

Eso esta buenisimo amigos!


La franja horaria es GMT +2. Ahora son las 14:45:20.

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