• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2479
  • Last Modified:

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

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
HenryM2
Asked:
HenryM2
  • 4
  • 4
1 Solution
 
aflarinCommented:
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
 
HenryM2Author Commented:

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
 
aflarinCommented:
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
Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

 
HenryM2Author Commented:
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
 
aflarinCommented:
>> 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
 
HenryM2Author Commented:
Thanks
0
 
Emmanuel PASQUIERFreelance Project ManagerCommented:
> 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
 
aflarinCommented:
Thanks Epasquier

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

0
 
HenryM2Author Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 4
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now