Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Qreport?? (https://www.clubdelphi.com/foros/showthread.php?t=17343)

fmonte 05-01-2005 14:07:12

Qreport??
 
Hola gente tengo una duda, no se come obtener el total de paginas en un qrepor, yo logre el numero de pagina actual, q es con TQRSysData y poniendo en "Data" a qrsPageNumber, pero no se como obtener el total de paginas, porque quiero imprimir en el reporte, por ejemplo Pagina 1 de N, ese N es q quiero obtener, como hago???
Muchas gracias
Pancho

marcoszorrilla 05-01-2005 14:37:30

Aquí tienes un ejemplo:

Código Delphi [-]
procedure TfrConVentas.SpeedButton4Click(Sender: TObject);
 var
 Bm:TbookMark;
 
 begin
 nOpcion:=0;
 nPages:=0;
 BM:=DmVil.Fact.GetBookMark;
 DmVil.Fact.DisableControls;
 
 DmVil.fact.Filter:='Numero ='+QuotedStr(DmVil.Factnumero.value);
 DmVil.fact.Filtered:=True;
 
   Application.CreateForm(TfrLptFactura,frLptFactura);
   frlptFactura.LptFactura.Prepare;
 
   nPages:=frlptFactura.LptFactura.QRPrinter.PageCount;
   noPcion:=0;
   frLptFactura.LptFactura.PreviewModal;
   frLptFactura.Close;
 
     DmVil.Fact.GotoBookmark(Bm);
     DmVil.Fact.EnableControls;
     DmVil.Fact.FreeBookMark(Bm);
 end;
 
 
 procedure TfrLptFactura.LptFacturaBeforePrint(Sender: TCustomQuickRep;
   var PrintReport: Boolean);
 begin
 
 lbPaginas.caption:='/ '+IntToStr(nPages);
 ...
Como verás es preciso hacer un Prepare antes para saber el número de páginas que va a tener el informe.

Muevo el tema al foro de impresión desde varios.

Un Saludo.

fmonte 05-01-2005 20:42:14

Código Delphi [-]
 procedure
Código Delphi [-]
 TfrConVentas.SpeedButton4Click(Sender: TObject);
  var
  Bm:TbookMark;
  
  begin
  nOpcion:=0;
  nPages:=0;
  BM:=DmVil.Fact.GetBookMark;
  DmVil.Fact.DisableControls;
  
  DmVil.fact.Filter:='Numero ='+QuotedStr(DmVil.Factnumero.value);
  DmVil.fact.Filtered:=True;
  
    Application.CreateForm(TfrLptFactura,frLptFactura);
    frlptFactura.LptFactura.Prepare;
  
    nPages:=frlptFactura.LptFactura.QRPrinter.PageCount;
    noPcion:=0;
    frLptFactura.LptFactura.PreviewModal;
    frLptFactura.Close;
  
      DmVil.Fact.GotoBookmark(Bm);
      DmVil.Fact.EnableControls;
      DmVil.Fact.FreeBookMark(Bm);
  end;
  
  
  procedure TfrLptFactura.LptFacturaBeforePrint(Sender: TCustomQuickRep;
    var PrintReport: Boolean);
  begin
  
  lbPaginas.caption:='/ '+IntToStr(nPages);
Hola no entiendo el codigo, primero no se que es el componente "DmVil" y me parece que tiene q ser mas sensillo, mira yo me base en los ejemplos que viene con delphi 6 y creo q la cantidad de Paginas es "Qrep1.QRPrinter.PageCount", pero no se yo lo segui y no se en donde ponerlo a este codigo, porque al principio es 1 y en algun momento se vuelve el total y ahi en donde yo puse el codigo para que muestre pero no me lo cambia. Te paso algo de codigo:
Código Delphi [-]
 ////////////////////////////////////////////////////////////////////////////////////
 //En este formulario tengo el TQuictReport//
 procedure TProdVend.QRep1Preview(Sender: TObject);
 begin
   with Form3 do
   begin
     QRPrev.QRPrinter := TQRPrinter(Sender); //Mostrar el texto correspondiente
     sePage.Value := QRPrev.QRPrinter.PageNumber; //Inicializar valores
     QRPrev.PageNumber:=sePage.Value;
     sePage.Value := 1;
     sePage.MinValue := 1;
     sePage.MaxValue := QRPrev.QRPrinter.PageCount;
     QRPrev.Zoom := 100;
     ZoomTo100.Down := True;
     spZoom.Value := 100;
     form3.Caption:= 'MOVIMIENTOS DIARIOS';
     form3.StBar.Panels[2].Text := 'Nombre : ' + 'MOVIMIENTOS DIARIOS';
     Show;
     Qrep1.QRPrinter.PageCount;
   end;
 end;
 ////////////////////////////////////////////////////////////////////////////////
 //En este formulario tengo el TQRPreview//
 procedure TForm3.QRPrevPageAvailable(Sender: TObject; PageNum: Integer);
 begin
   sePage.MaxValue := PageNum; //Ajustar el contador y la
   StBar.Panels[0].Text := 'Pag. 1/' + IntToStr(PageNum); //barra de tareas
   MaxPag := PageNum;
 end;
 ///////////////////////////////////////////////////////////////////
 procedure TForm3.sePageChange(Sender: TObject);
 begin
   QRPrev.PageNumber := sePage.Value;
   StBar.Panels[0].Text := 'Pag. ' + IntToStr(sePage.Value) + '/' + IntToStr(MaxPag);
 end;
 ////////////////////////////////////////////////////////
 procedure TForm3.sbFirstPageClick(Sender: TObject);
 begin
   sePage.Value := 1;
 end;
 //////////////////////////////////////////////////////////
 procedure TForm3.sbNextPageClick(Sender: TObject);
 begin
   if sePage.Value < QRPrev.QRPrinter.PageCount then
     sePage.Value := sePage.Value + 1;
 end;
 ///////////////////////////////////////////////////////////
 procedure TForm3.sbPreviousPageClick(Sender: TObject);
 begin
   if sePage.Value > 1 then
     sePage.Value := sePage.Value - 1;
 end;
 //////////////////////////////////////////////////////////////////////////
 procedure TForm3.sbLastPageClick(Sender: TObject);
 begin
   sePage.Value := QRPrev.QRPrinter.PageCount;
 end;
 //////////////////////////////////////////////////
 procedure TForm3.PrintSetupClick(Sender: TObject);
 begin
   with ProdVend.QRep1 do
   begin
     tag := -1;
     PrinterSetup;
     if tag = 0 then
       print;
   end;
 end;
 ////////////////////////////////////////////////////////////////////
 procedure TForm3.PrintClick(Sender: TObject);
 begin
   QRPrev.qrprinter.Print;
 end;
 ///////////////////////////////////////////////////////////////

marcoszorrilla 05-01-2005 21:52:29

Pues DmVil es la referencia al DataModulo en donde se hallan las tablas, te he pegado todo el código de la llamada, aunque lo único que interesa es como se hace el prepare como se guarda el número de páginas en una variable y como se muestra luego en QuickReport.

Un Saludo.

darkerbyte 16-10-2010 02:19:52

Doble proceso
 
Hola.

Yo tambien estoy viendo como obtener el numero de paginas del reporte. Sin embargo la solución aqui presentada tiene una deficiencia. Primero tienes que llamar al procedimiento prepare() para luego obtener el numero de paginas.
Eso no es el problema el punto es q al hacer el previewmodal() Quick report automaticamente prepara el informe antes de presentar la previsualizacion. Por lo que tenemos un proceso repetido en la preparación del informe. En un reporte de muchas paginas afecta

rfernandez 25-10-2010 14:22:26

Llevo muchos años con Quickreport, desde delphi 3.0, y os diré que, si no estoy equivocado, la única manera de conseguir el número de pàginas es haciendo el .Prepare tal y como antes os han comentado.

Es una de las deficiencias que tiene QuickReport vs otras herramientas de impresión.

Saludos,


La franja horaria es GMT +2. Ahora son las 03:55:14.

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