FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Imprimir en QReport
hola gente, mi consulta es si hay una manera de que no salte un error cuando uno hace doble click (por equivocacion) en el speedButon de la impresora en el Quick report...
saludos y gracias pablo
__________________
Pablo Tello |
#2
|
|||
|
|||
Qué sppedButton? Qué versión de Delphi? Qué versión de QR?? Es que nunca me ha pasado
|
#3
|
||||
|
||||
Hola Pablo!
Y qué mensaje de error te da? Saludos... |
#4
|
||||
|
||||
Acabo de comprobar que si ocurre, haces una vista previa incluso con un programa finalizado haces doble clic en el icono impresora y te salta un error, la solución la tienes el la Web de Cadetill, es decir hazte un previsualizador personalizado.
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#5
|
|||
|
|||
Cita:
Delphi 6 Ent. + QR 3.0.9 + W2k y ninguna de las impresoras (la de configuración y la de impresión) me hace saltar ningún error Cómo lo has logrado Marcos?? PD: no obstante, recomiendo personalizar el Previsualizador del QR a uno propio, se puede controlar mucho mejor |
#6
|
||||
|
||||
Pues mira un programa para control de cursos que casualmente estoy utilizando ahora, por lo que no me puedo extender, hago vista previa doble clic sobre la impresora y me lanza el famoso "Access violation".
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#7
|
|||
|
|||
pues sí, Marcos, es que yo sólo lo probaba con un simple clic, no con un doble clic.
El doble clic hace fallar tb a mi previsualizador No se como lo hará el Preview del QR, pero en el mio hace lo siguiente
Bueno, hacía, porqué lo que cambiado por esto
El problema: Que el método Print no hace que el programa "se pare" en esa linea y vuelve a desbloquear los controles Miraré a ver como se puede controlar el tema |
#8
|
||||
|
||||
Seguramente print se ejecuta en otro hilo.
La printer no tiene alguna propiedad printing o algo similar?? con esto fácilmente se podria hacer algo como:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#9
|
|||
|
|||
Hola
He investigado por la linea que indicaba Juan Antonio pero claro, tan fácil no podía ser Entonces he probado con la propiedad Status de TQRPrinter que, según una documentación antigua que he encontrado por internet (QR para D1) una impresión pasaba por estos estados Veo que en aquel entonces tenía el estado mpPrinting, y pienso, "de coña, un bucle mientras esté en este estado y listo!!!". Pues no, tampoco, lo señores de QuSoft tenían que quitar este estado. De hecho, almenos desde la versión que biene en Delphi 3, sólo quedan 3 de los 5 estados (encontré unos fuentes antiguos de la versión de D3)
Por lo que sólo veo una solución y es "apoderarme" del evento AfterPrint del Report y lanzar el mio propio para volver a habilitar los botones. Total que hago lo siguiente Es decir, miro si estaba asignado el evento para lanzarlo despues del mio y al evento le asigno mi procedure. Pero, el problema es que no me captura mi procedure y sigue lanzando el suyo (el del componente TQuickReport) No se por donde falla la lógica, pero debería de funcionar, no? O estoy muy espesito ya? Ala, un saludo |
#10
|
||||
|
||||
Muchas veces deshabilitando botones no funciona como "anti-rebote", pues si lo que hace dentro del botón es un proceso que no devuelve el control al sistema (Application.ProcessMessages), recien cuando termine este proceso se ejecutará el otro click por lo que tendras muchas impresiones (A la larga nunca sabrás si es lo que quizo el usuario)
Como prueba básica lo manejaría con una bandera:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. Última edición por delphi.com.ar fecha: 30-04-2004 a las 01:28:01. |
#11
|
||||
|
||||
es que al parecer print inicia la impresión en otro hilo... y devuelve inmediatamente el control al hilo principal. Si aún está imprimiendo y se invoca nuevamente a print, entonces la aplicación casca!!
Pa'variar... quick report
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#12
|
|||
|
|||
Efectivamente, como dice Juan Antonio, la opción propuesta falla porque el método Print devuelve el control del programa (lo acabo de probar)
Si se os ocurre alguna otra cosa.... será bienvenida, sino, será cuestión de cortarle las manos al usuario Por cierto, otra cosa que he intentado (sin éxito) es redefinir el método Print, pero claro, éste no es virtual y me he quedado con las ganas |
#13
|
||||
|
||||
Probaste lo que yo pase???...
PD: Le agregué el ProcessMessages, para que precisamente no haga lo que comente, igual aclaro que no tengo un Delphi para probarlo. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#14
|
|||
|
|||
Esto...
Cita:
|
#15
|
||||
|
||||
A... eso era para mi!!
¿¿¿Quieren decir que Print es Asincrónico???? La verdad no lo creo!! Si no es así tendría que funcionar, porque no se ejecutaría hasta que la bandera vuelva a su estado False
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#16
|
|||
|
|||
Esto... alvida mi mensaje anterior, que no había visto que has modificado el primero con el ProcessMessage
Por cierto, con él, funciona estupendamente, aunque no termino de enterder por qué? Si fueras tan amable de explicarmelo |
#17
|
||||
|
||||
Uff.. me había asustado...
A ver si este ejemplo te sirve: Yo tengo el cuando el usuario hace varios clicks seguidos sobre ese botón, con la velocidad como para que sean interpretados como simples clicks, el hilo de ejecución ingresa en el método Button1Click y hasta que no sale de ahí no responderá a los mensajes del sistema operativo, como hizo mas de un click, los mensajes quedan encolados y se dispararán inmediatamente despues de que la aplicación responda a los mensajes de sistema operativo. ¿Fui claro?...o la compliqué
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#18
|
||||
|
||||
Me olvidé de un detalle (otra vez), lo que logro con ese ProcessMessages es que la aplicación dispache todos los mensajes en cola, antes que la bandera vualva a valer False!
(Prueba Poniendo un BreakPoint en la primer línea del método y verás lo que sucede) Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#19
|
|||
|
|||
Pues me parece que lo dejo para mañana, hoy estoy ya muy espeso y no lo veo claro
No obstante, decir que, para aquesllos que quieran, en mi web ya tenéis una nueva versión del Previsualizador con este error corregido (para D5, D6 y D7) Ala, buenas noches |
#20
|
||||
|
||||
Hola,
A mi se me ocurre otra opción para mi gusto más elegante. ¿ Por que cuando se le da a imprimir desde un preliminar personalizado en el click del botón preliminar no imprimir directamente en la impresora sino sacar el cuadro de diálogo de configuración de impresoras (donde se puede elegir impresora y la configuración de la misma) ? Al aparecer un cuadro de diálogo modal se garantiza que el usuario no pueda hacer doble click en el botón y además se permite al usuario por ejemplo elegir otra impresora. Se que me direis que eso requiere de dos clicks para imprimir pero bueno, a mi no me parece trastorno. En el preview personalizado que tengo es como lo hago y me funciona bien (y por ahora nadie se ha quejado). Os pongo el código del click del botón imprimir de mi preview personalizado para que lo probeis a ver que opinais.
En mi formulario de Preview Personalizado añado algo así:
Y el constructor es así:
Y el close del formulario sería:
Espero vuestro comentarios... Un saludo.
__________________
Todos somos aficionados. La vida es tan corta que no da para más. Guia de Estilos |
|
|
|