Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   cerrar preview del quickreport (https://www.clubdelphi.com/foros/showthread.php?t=65265)

amurrieta 01-12-2009 19:31:36

cerrar preview del quickreport
 
Hola foro, estoy utilizando quickreport 3.0 y delphi 7, necesito cerrar el preview antes de volver a lanzar otro qreport.preview. Estoy llamando mi reporte desde una formta mdi. Lo cierto es que no puedo cerrar el preview que se despliega, esto es para validar que si el usuario final no oprime el botón cerrar del reporte anterior yo lo cierre desde código y sólo se despliegue siempre un sólo preview. Estoy lanzando mi reporte de esta forma y validando que si está abierto lo libero pero la ventana del preview aún se queda en pantalla, alguien sabe como hacerlo, les agradezco sus respuestas. O en su caso como acceder al botón close del preview para mandarle un click a ese botón?

Código Delphi [-]If ReporEmpresa = nil then Begin ReporEmpresa := TReporEmpresa.Create(self); End Else Begin ReporEmpresa.Free; ReporEmpresa := nil; ReporEmpresa := TReporEmpresa.Create(self) End; ReporEmpresa.Preview; ReporEmpresa.Free;


Gracias.

rgstuamigo 01-12-2009 21:10:15

Y por que no hacer que el Preview sea Modal? es decir que lo obligue al usuario a cerrarlo para volver al anterior formulario.;)
Eso se consigue asi:
Código Delphi [-]
...
ReporEmpresa.PreviewModal;
...
Saludos...:)

amurrieta 02-12-2009 01:07:43

Gracias por contestar rgstuamigo, mira lo que pasa es que el preview lo pongo dentro de una forma mdi, pero la parte de la izquierda y menú queda disponible y desde ahí puede enviar nuevamente el reporte, por tal motivo quiero validar que aunque el usuario no lo cierre yo lo pueda cerrar por código.

Alguna otra idea?

rgstuamigo 02-12-2009 15:48:46

Bueno entonces si no se puede por las buenas entonces por las malas.:mad::D:D
Vamos a utilizar algunas API de Windows para cerrar la dichosa ventana.
ejemplo:
Código Delphi [-]
procedure TForm1.CerrarClick(Sender: TObject);
var
  hWnd:THandle;
begin
  hWnd:=FindWindow(nil, 'Report Preview : Prueba');//busco el handle de la ventana de previsualizacion
{En el caso tuyo debes poner el Caption que te aparece en la ventana De previsualizacion}
  SendMessage(hWnd,WM_SYSCOMMAND,SC_CLOSE,0);//mando a cerrar dicha ventana
end;
Espero te sea de utilidad.;)
Saludos...:)

amurrieta 03-12-2009 18:20:52

He probado tu solución y si ha funcionado cerrando las ventanas. Agradezco tu ayuda. Mi duda es si esta solución aplica para cualquier version de windows, es decir esa api de windows no cambia para las versiones de vista o win7? Gracias.

rgstuamigo 03-12-2009 18:56:27

Cita:

Empezado por amurrieta (Mensaje 348096)
He probado tu solución y si ha funcionado cerrando las ventanas. Agradezco tu ayuda. Mi duda es si esta solución aplica para cualquier version de windows, es decir esa api de windows no cambia para las versiones de vista o win7? Gracias.

Pues no creo que haya problemas...;),en todo caso es cuestion de hacer la prueba.;).
Saludos...:)

elzorro1957 11-05-2010 17:37:04

Cerrar Ventana Preview
 
Muchas gracias, me ha sido de mucha utilidad poder cerrar desde el código la ventana con la vista previa del Quick Report.

rgstuamigo 11-05-2010 23:36:07

Cita:

Empezado por elzorro1957 (Mensaje 363589)
Muchas gracias, me ha sido de mucha utilidad poder cerrar desde el código la ventana con la vista previa del Quick Report.

Bueno pensandolo :rolleyes: bien y viendo éste hilo tambien se podia cerrar la ventana de Preview de ésta manera:
Código Delphi [-]
procedure TForm1.CerrarClick(Sender: TObject);
begin
TQRStandardPreview(QuickRep1.QRPrinter.Client.Parent).ExitButton.Click;
end;
.
Claro está que no hay que olvidarse de incluir la unidad QRPrev en el Uses.;)
Saludos...:)

tengotutto 21-02-2019 22:06:49

Control de cierre
 
A mi me tiraba el error "Illegal call to NewPage" y era porque el usuario cerraba el form antes de terminar de generar la vista previa.


Lo controle en el FormCloseQuery con:



CanClose := (OQRPreVista.QRPrinter.Status <> mpBusy);


La franja horaria es GMT +2. Ahora son las 23:32:37.

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