PDA

Ver la Versión Completa : Print Preview


StartKill
05-02-2008, 17:28:06
Saludos foro, despues de tanto tiempo :)

Estoy trabajando con:


Windows XP
Delphi 7.0
QuickReport version 4.06


Bueno, estoy haciendo un "qr1.preview" desde la pulsación de un boton de un formulario, no quiero que cuando el user presione de nuevo el botton se cargue otro qr1.Preview.

No me sirve el qr1.previewModal, ya que necesito que continue navegando en el programa.

Trate de solucionar preguntando en el codigo del botton si el "qr1.preview" esta activo, pero encuentro la propiedad.

Algun otro metodo para realizar mi requerimiento

De ante mano muchas gracias por su ayuda.

Your friend:cool:
StartKill
Lima-Perú

ContraVeneno
05-02-2008, 18:17:01
¿y si utilizas una variable "boolean"?


..
var: VerPrevia: Boolean;
...
OnCreate de tu formulario ()
..
VerPrevia := True;
..

OnClickPrevia ()
If VerPrevia then begin
VerPrevia := False;
Reporte.Preview;
end;

Reporte AfterPreview()
VerPrevia := True;



P.D. La versión más reciente es la 4.07

StartKill
05-02-2008, 18:50:48
Saludos Contravenno.

Probé tu código, muy buena la idea, funciona!!!.

Hay un pequeño inconveniente, me explico:

Imaginemos que el user hace su PrintPreview" de unas 12 paginas o mas, pero cuando esta en la 5ta pagina el user presiona el BOTONAZO cancelar/Cerrar (es un user arrependido de su Printpreview), entoces como consecuencia el evento "AfterPreview" no se ejecuta... y como no se ejecuta la variable tampoco :(

Bueno, voy implementar tu codigo que me será de mucha utilidad hasta encontrar otra solución. (gracias, no soy malagradecido)

Una Duda, hay forma de capturar el evento cuando se cierra el print-preview?, trate de hacerlo en el evento on-close pero del formulario que contiene el quieckreport, pero sin exito.

No es otra pregunta (foro no me critiquen), estoy tratando de buscar la solucion correcta a este problema :)

Muchas Gracias

Your friend

StartKill
Lima-Perú

PD: la version 4.07... ups!!! y pense que tenia la ultima de la version 4.?.?.?

ContraVeneno
05-02-2008, 20:02:14
Podrías cambiar del evento "AfterPreview", al evento "AfterPrint".

Fuera de esos dos eventos, no se me ocurre de que forma podrías darte cuenta de cuando cierran el "Preview". Lo ideal sería un "PreviewModal", pero como ya dijiste que eso no te sirve, pues... :confused:

saludos

StartKill
05-02-2008, 20:28:24
Por ContraVenenno:

Podrías cambiar del evento "AfterPreview", al evento "AfterPrint".

Fuera de esos dos eventos, no se me ocurre de que forma podrías darte cuenta de cuando cierran el "Preview". Lo ideal sería un "PreviewModal", pero como ya dijiste que eso no te sirve, pues... :confused:

Nop, Nop ,Nop...90h, 90h, 90h :), recordemos que el user no termina de hacer el printpreview, "lo cancela" por consecuancia no se ejecuta ninguno de los eventos mencionados.

Your friend:cool:
StartKill
Lima-Perú

Lepe
05-02-2008, 21:33:19
En el foro hay un método para detectar la vista preliminar de QuickReports, y en el hilo se hablaba de deshabilitar botones de esa presentación preliminar. Lástima que no recuerde como encontrar el hilo.

Otra forma sería haciendo tú mismo tu presentación preliminar, y allí sí tendrías oportunidad de hacer lo que quisieras. En este hilo se habla algo (http://www.clubdelphi.com/foros/showthread.php?t=52155&highlight=GlobalPreviewInterface)


Saludos

Héctor Randolph
05-02-2008, 22:11:16
Supongo que Lepe se refiere a este hilo (http://www.clubdelphi.com/foros/showthread.php?t=16608).

Seguramente por medio de la interfase TQRStandardPreview puedes acceder al método OnClose de la forma.

Saludos

Héctor Randolph
05-02-2008, 22:31:24
Aquí les dejo el código de una pequeña prueba que hice. Coloqué un reporte y un botón dentro del formulario. La idea es capturar el evento que se genera al cerrar la vista previa.


type
TForm1 = class(TForm)
QuickRep1: TQuickRep;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
private
{ Private declarations }
procedure CerrarPreview(Sender: TObject; var Action: TCloseAction);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
var
I: Integer;

begin
for I:=0 to Screen.FormCount-1 do
begin
if Screen.Forms[I].ClassName='TQRStandardPreview' then
begin
Screen.Forms[I].OnClose:=CerrarPreview;
end;
end;
end;

procedure TForm1.CerrarPreview(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('Se cerró el formulario de la vista previa.');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
QuickRep1.Preview;
end;

end.



Saludos

keyboy
05-02-2008, 22:55:59
¿Y si usan a la misma ventana del preview como variable "booleana"?


function IsPreviewActive: Boolean;
var
I: Integer;

begin
Result := false;

for I := 0 to Screen.FormCount - 1 do
if Screen.Forms[I].ClassName = 'TQRStandardPreview' then
begin
Result := true;
break;
end;
end;


Así, al hacer el preview sólo tienen que examinar el valor de la función:


if IsPreviewActive then
ShowMessage('Ya hay una vista preliminar activa')
else
QuickRep1.Preview;


Bye

StartKill
06-02-2008, 00:38:55
Señores.

Gracias por su ayuda, me servieron todas sus sus ideas. (hasta la ultima linea de código)

Tambien encontré esto, http://www.rinconcitodelphi.com/articulos/QReport/QReport.pdf aun no lo he leido, creo ya no sera necesario gracias a Uds.

Your friend:cool:
StartKill
Lima-Perú