FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Pregunta sobre QRCreateList
He diseñado una opción que me permite realizar el listado de la información de todas las tablas de mi base de datos seleccionando los campos y los criterios de ordenacion, por otro lado tengo un formulario de preview personalizado y quisiera hacer que la previsualización del listado "genérico" salga por el mio personalizado en lugar del standard del QuickReport para poder utilizar las funcionalidades implementadas en él (Básicamente la exportación de datos).
|
#2
|
||||
|
||||
Hola Jesús.
Bueno, me ha confundido bastante tu mensaje, de hecho no entiendo tu pregunta, lo que es más no veo ninguna pregunta. Así que ahora pregunto yo, ¿Lo que realmente quieres es utilizar un formulario personalizado para mostrar la vista previa de un reporte? Porque, según el título tu pregunta es referente a QRCreateList Bueno responderé a la cuestión del formulario personalizado: Tienes que crear una interfaz para mostrar el formulario, esto lo consigues derivando de la clase TQRPreviewInterface y creando los métodos Show y ShowModal Paso 1:
no olvides incluir a QRPrntr en uses. Después implementas los métodos Show y ShowModal Paso 2
En el código anterior donde aparece TCustPreview coloca el nombre de tu formulario personalizado. Esto lo puedes guardar un una unit por separado. Después tienes que registrar la interface con la función RegisterPreviewClass que se encuentra en la unidad QRPrntr no olvides incluirla en uses. Paso 3:
Este código lo pones al iniciar tu aplicación, con esto lográs que cada vez que invoques al método Preview o PreviewModal se hace una llamada a tu formulario. Una cosa más, debes redefinir el constructor de tu formulario personalizado para que responda correctamente, esto lo lográs con el siguiente código.
Espero que sea útil, un saludo |
#3
|
||||
|
||||
Bien pero ......
La solución está "bien" de hecho el objetivo que queria conseguir está logrado y funcionando, lo que ocurre es que ahora los listados que tenia ya desarrollados no se ven. He de decirte que cada vez que el usuario solicita un listado este se muestra en modo preview y tiene la opcion desde el preview de imprimir este por la impresora.
Si sabes a que se puede deber esta anomalía te agradecería tu ayuda. El código que tengo implementado en el report base (tengo uno base y los demás heredan de ese) es procedure TqrBase.QuickRepPreview(Sender: TObject); begin with TfrmQRPreview.Create(Sender as TQRPrinter) do begin frmQRPreview.QRPreview1.QRPrinter := Sender as TQRPrinter; frmQRPreview.ShowModal; // El formulario se destruye automáticamente end; end; y al compilar me da error en la linea with TfrmQRPreview.Create(Sender as TQRPrinter) do dándome el siguiente mensaje [Error] qBase.pas(62): E2010 Incompatible types: 'TComponent' and 'TQRPrinter' Saludos. Última edición por Jesús Pena fecha: 23-11-2005 a las 12:36:52. |
#4
|
||||
|
||||
Hola amigo Jesús
Con el código que publiqué anteriormente no necesitas crear el formulario cada vez que quieras mostrar una vista previa, para eso es la interfaz para remplazar la vista previa estándar de QReport por una personalizada. Lo único que tienes que hacer es invocar al método Preview de cualquier reporte y automáticamente se mostrará tu formulario.
Por cierto, para que se entienda mejor el código que publicas utiliza las etiquetas que proporciona el foro por ejemplo la etiqueta [delphi]. [ delphi] //coloca aquí tu código [ /delphi] Un saludo |
#5
|
||||
|
||||
He hecho como me dices pero ...
al hacer el qrxxxxxx.preview dá un access violation y no sé cual puede ser la solución.
Gracias por tu atención. |
#6
|
||||
|
||||
Hola Jesús
Revisa el código que te envío adjunto, lo he probado y funciona sin problemas. Saludos |
#7
|
||||
|
||||
He visto el proyecto que me enviaste y todo muy bien pero ....
He revisado el proyecto que me has enviado y lo veo bien y todo correcto pero mi aplicación sigue sin funcionar por lo cual te pido que me guies de cómo puedo hacerlo bien.
Te cuento, mi aplicación tiene un menu desde el que se lanzan los distintos módulos que forman parte de la aplicación, existen módulos de captura de datos (heredados de un formulario base que contiene todas las cosas comunes a los formularios) y desde los mismos se pueden lanzar Reports (heredados también de un report base), tengo tambien en dicho menu la posibilidad de lanzar esos listados, así como un generador "genérico" de informes en los que en función de la tabla seleccionada, los campos de los mismos y un criterio de ordenación establecidos por el usuario se realiza un listado con qrcreatelist (este último lo visualiza bien con el preview personalizado). En el report base tengo en el evento QuickRepPreview tengo el siguiente código Código:
procedure TqrBase.QuickRepPreview(Sender: TObject); begin qrBase.Preview; end; Si no te importa, me gustaria que me indicaras en donde tengo que colocar cada una de las cosas que me indicaste en el mensaje del 23/11/2005 06:39 para que funcione, me estoy volviendo loco y una cosa que me parece de gran utilidad tendré que prescindir de ella pues estoy perdiendo un tiempo muy valioso (EL TUYO TAMBIEN LO ES). Gracias y perdón por tantas molestias. P.D. : Por cierto sé que necesito el parche para la rtl90.bpl (para la gestión de memoria) pero además de en borland no sé donde conseguirlo ¿sabrás tú donde?. |
#8
|
||||
|
||||
Sólo una pregunta, ¿Porqué en un evento OnPreview, lanzas otra vez el preview?
Es decir, al parecer estás anidando incorrectamente los eventos, si dentro del evento OnPreview del reporte base haces otra llamada a Preview estas generando recursividad. Prueba a lanzar la vista previa del reporte base fuera del evento, por ejemplo en un evento Onclick de un botón. Saludos |
|
|
|