Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2008
cestradar cestradar is offline
Miembro
 
Registrado: ene 2008
Posts: 24
Poder: 0
cestradar Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 14-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 15-01-2008
cestradar cestradar is offline
Miembro
 
Registrado: ene 2008
Posts: 24
Poder: 0
cestradar Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
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, ¡ya funcionó!, 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 Ver Mensaje
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 Ver Mensaje
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.
Responder Con Cita
  #4  
Antiguo 15-01-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Eso esta buenisimo amigos!
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
Adobe Lanza plataforma de desarrollo nightynvid Noticias 0 08-03-2007 18:38:23
Como guardo internamente un reporte en quickreport a PDF tulio Impresión 5 12-02-2007 17:28:11
Mensajes con messagedlg lbidi Varios 13 12-02-2007 16:07:39
Modificar campos internamente Max_E. Conexión con bases de datos 7 07-11-2006 06:12:10
Yahoo lanza un buscador de podcasts y se lanza a competir con itunes Sasuke_Cub Noticias 0 12-10-2005 20:45:11


La franja horaria es GMT +2. Ahora son las 10:59:36.


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