Solved

Delphi Rave Reports How do you link the CurrentPage and Pages Properties to TRVSystem Component

Posted on 2010-09-01
9
2,209 Views
Last Modified: 2013-11-23
Using Code Based Rave Reports in Delphi, how do I display the CurrentPage Number and Total Pages in a report? I have a TRVSystem component but the CurrentPage and Pages property is linked to the TRvRenderPreview component.
0
Comment
Question by:HenryM2
  • 4
  • 4
9 Comments
 
LVL 13

Expert Comment

by:aflarin
Comment Utility
Well, the current page you can show easy:

  procedure PrintGridHeader;
  ....
    with Sender as TBaseReport do
    begin
      if CurrentPage <> 1 then // don't show page number on the first page (just for example)
        PrintCenter(IntToStr(CurrentPage), PageWidth/2);
0
 

Author Comment

by:HenryM2
Comment Utility

I am using this line:

PrintCenter('Page ' + IntToStr(CurrentPage) + ' Of ' + IntToStr(Pages), PageWidth/2);

The compiler is happy with (CurrentPage) works but it reports  (Pages) is reported as Undeclared Identifier..


0
 
LVL 13

Expert Comment

by:aflarin
Comment Utility
the problem is how to know amount of pages if is still printing

it seems you have to generate first, save page count into variable and then generate it again. Here is example:

procedure TForm1.Button1Click(Sender: TObject);
begin
  RvSystem1.Generate; // generates only for getting page count
  RvSystem1.Execute; // the second for preview
end;

var
  Pages: Integer;

procedure TForm1.RvSystem1AfterPrint(Sender: TObject);
begin
  Pages:= (Sender as TBaseReport).CurrentPage;
end;


procedure TForm1.RvSystem1Print(Sender: TObject);

  procedure PrintGridHeader;
  var
    iCol: Integer;
    curY: Double;
  begin
    with Sender as TBaseReport do
    begin
      if CurrentPage <> 1 then
        PrintCenter(IntToStr(CurrentPage) + IntToStr(Pages), PageWidth/2);
   ......

0
 

Author Comment

by:HenryM2
Comment Utility
Yes, this is one way.  The other way I thaught about  to get the number of pages would be to take the number of rows in the StringGrid and Div it by 50 (50 lines per page) + 1.

The idea of pages, however came form the Rave Report manual.  Below, a screen print from the manual.  Is this not an option?


Rave-Report-Pages-Property.png
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 13

Accepted Solution

by:
aflarin earned 500 total points
Comment Utility
>> and Div it by 50 (50 lines per page) + 1.

It's a good idea. But you should add 1 only if count of lines > 50, 100, 150 etc
Like this:

Pages:= (StringGrid1.RowCount div 50);
if (StringGrid1.RowCount mod 50) > 0 then
  Inc(Pages);

>> Is this not an option?

I guess no, it only for showing in your controls as report status, but the report was already generated and you can't print the count of pages


0
 

Author Closing Comment

by:HenryM2
Comment Utility
Thanks
0
 
LVL 25

Expert Comment

by:epasquier
Comment Utility
> Pages:= (StringGrid1.RowCount div 50);
> if (StringGrid1.RowCount mod 50) > 0 then Inc(Pages);

This kind of thing is generally done in one single step :

Pages:= ( Count + NbPerPage -1 ) Div NbPerPage;

in you case :
Pages:= (StringGrid1.RowCount+49) div 50;

Open in new window

0
 
LVL 13

Expert Comment

by:aflarin
Comment Utility
Thanks Epasquier

I suspected that it can be done in one string, but was too tired to think

0
 

Author Comment

by:HenryM2
Comment Utility
Thanks to both of you.  Well as they say, there is many ways to skin a cat, perhaps some a bit more elegant than others, but the main thing is that my program is working very well.
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now