Rave - Modificando o Form Preview v.5.0

Top  Previous  Next

Tip #74 - Changing the Rave 5.x Preview Form

 

 

 

Category

Code Based - General

 

 

 

Question

 

How do I replace the default preview form that comes with Rave 5.x?

 

 

 

 

Solution

 

There are several methods you can use to modify the preview screen. The method you choose will largely depend upon whether you have source code (BEX version) or not (BE version).

 

METHOD 1 (quickest but NOT recommended)

 

The method requires source code (BEX version)

1) Start Delphi (or other Borland product (CBuilder etc)

2) Open the form RpFormPreview located in the Rave5\Source directory

3) Make the desired changes and save them

4) Close Delphi (or other Borland product)

5) Run the appropriate batch file located in Rave5\Source (Full??.BAT). For Delphi 7, it would be FullD7.Bat.

 

That's it, you have your own preview. However, this method is NOT recommended. The primary disadvantage to using this approach is problems when new patches for Rave Reports are released. The updated Rave might not recognize the modifications to the source code and you might run into problems.

 

METHOD 2 (source code available - BEX version)

 

This is the recommended method for those that have Rave Reports source code (BEX customers). This method shows how to override the built-in preview system. This approach is more flexible and therefore, more desirable. In simple terms, you copy the existing preview source (RpFormPreview) to a different name (say MyPreview). Then you use the RpSystem source to see how the OverridePreviewProc is structured and copy appropriate parts to your RvSystem component overridepreview event. Now here are the steps.

 

PART 1

 

1. Copy RpFormPreview.PAS and RpFormPreview.DFM to new files, let's call them MyPreview.PAS and MyPreview.DFM.

 

2. Open MyPreview.PAS inside Delphi (preferably with your project already open) and rename the unit heading to MyPreview.

 

3. Rename the form associated with MyPreview.PAS to MyPreviewForm in the Object Inspector.

 

4. Add the unit MyPreview to your project using the project manager.

 

PART 2

 

5. Open the file RPSYSTEM.PAS from the source subdirectory and go to the procedure OverridePreviewProc. This block of code will be used in the next step.

 

6. Go to one of your ReportSystem components and open event tab. Then create (double-click) on the OverridePreview event. In OverridePreview code area copy the corresponding code from the RPSYSTEM.PAS OverridePreviewProc block of code.

 

7. Replace all occurrences of TRPPreviewForm (standard preview) with TMyPreviewForm (your custom preview) throughout the new OverridePreview procedure.

 

8. Make some simple change to your MyPreview source. For example, change the caption to read "New Custom Preview".

 

9. Recompile your project using Build All.

 

Run your program and generate a report that uses the modified ReportSystem component. If you see your "New Custom Preview", then you are well on your way. Now, you can modify your custom preview form as you wish.

 

METHOD 3 (NO source code available - BE version)

 

This is the only method available to those that do not have Rave Reports source code (BE customers). This method shows how to override the built-in preview system. This approach is flexible and allows you to create a preview form of your own design. We will create a very simple preview form using a name MyPreview. Then you place some override statements in your RvSystem component overridepreview event. Now here are the steps for a simple preview system.

 

PART 1

 

1Create a new form and call it say -- MyPreview.PAS and MyPreview.DFM.

 

2. Add the unit MyPreview to your project using the project manager.

 

3. Open MyPreview.PAS inside Delphi and add the following components.

a) tPanel and set the align property to alTop

b) Drop 5 buttons on the tPanel area

c) Drop an "Edit" box on the tPanel area

d) Drop a "ScrollBox" on the form (set align property to alClient)

e) Go back to the buttons and assign the following caption properties and OnClick events. The simple way to create an OnClick event shell is to double-click on that button.

 

BUTTONS

 

1st button -- First page

caption property set to "&First"

First Page button onClick event -- add following code

 

   RvRenderPreview.RenderPage(1);

 

2nd button -- Previous Page

caption property set to "&Previous"

Previous page button onClick event -- add following code

 

  If RvRenderPreview.CurrentPage > 1 Then Begin

    RvRenderPreview.PrevPage;

  End;

 

3rd button -- Next Page

caption property set to "&Next"

Next page button onClick event -- add following code

 

  If (RvRenderPreview.CurrentPage < RvRenderPreview.Pages) Then Begin

    RvRenderPreview.NextPage;

  End;

 

4th button -- Last Page

caption property set to "&Last"

Last page button onClick event -- add following code

 

  RvRenderPreview.RenderPage(RvRenderPreview.Pages);

 

5th button -- Close

caption property set to "&Close"

Close button onClick event -- add following code

 

  Close;

 

 

MYPREVIEW FORM

 

MyPreview OnClose event -- add following code

 

 "FormClosed := true;"

 

MyPreview OnCreate event -- add following code

 

  FPageNum := 1;

  RvRenderPreview := TRvRenderPreview.Create(self);

  With RvRenderPreview Do Begin

    OnPageChange := NDRPreviewPageChange;

    ShadowDepth := 2;

    MarginPercent := 5;

    ZoomFactor := 100;

    ScrollBox := ScrollBox1;

  End{ with }

 

  RvRenderPrinter := TRvRenderPrinter.Create(self);

  With RvRenderPrinter Do Begin

  End{ with }

 

MyPreview OnDestroy event -- add following code

 

  FreeAndNil(RvRenderPreview);

 

MyPreview form -- add following procedure

 

procedure TFormMyPreview.NDRPreviewPageChange(Sender: TObject);

begin

  with RvRenderPreview do begin

    lblPageNo.Text:= IntToStr(CurrentPage);

  end{ with }

end;

 

 

MyPreview form -- be sure the following is part of your uses statement

 

  RpDefine, RpRenderPreview, RpSystem;

 

4. That is it for your sample preview form for now. Later, you can go back and change it to anything you want.

 

PART 2

 

This is the last thing to do to create an override of the built-in preview. Go to one of your ReportSystem components and look at the event tab. Then create (double-click) on the OverridePreview event. In OverridePreview code area copy the following code.

 

ReportSystem OverridePreview event -- add following code

 

Procedure TFormOverride.RvSystem1OverridePreview(ReportSystem: TRvSystem;

  OverrideMode: TOverrideMode; Var OverrideForm: TForm);

Begin

  Case OverrideMode Of

    omCreate: Begin

        OverrideForm := TFormMyPreview.Create(self);

        OverrideForm.Caption := ReportSystem.TitlePreview;

        OverrideForm.Width := ReportSystem.SystemPreview.FormWidth;

        OverrideForm.Height := ReportSystem.SystemPreview.FormHeight;

        OverrideForm.WindowState := ReportSystem.SystemPreview.FormState;

        (OverrideForm As TFormMyPreview).ReportSystem := ReportSystem;

      End;

 

    omShow: Begin

        ReportSystem.SystemPreview.InitPreview((OverrideForm As TFormMyPreview).RvRenderPreview);

        If Assigned(ReportSystem.OnPreviewSetup) Then Begin

          ReportSystem.OnPreviewSetup((OverrideForm As TFormMyPreview).RvRenderPreview);

        End{ if }

 

        (OverrideForm As TFormMyPreview).InputFileName := ReportSystem.SystemFiler.Filename;

        (OverrideForm As TFormMyPreview).InputStream := ReportSystem.SystemFiler.Stream;

        (OverrideForm As TFormMyPreview).InitFromRPSystem;

    (* *)

        If soPreviewModal In ReportSystem.SystemOptions Then Begin

          OverrideForm.ShowModal;

        End Else Begin

          OverrideForm.Show;

        End{ else }

      End;

 

    omWait: Begin

        If Not (soPreviewModal In ReportSystem.SystemOptions) Then Begin

      // Wait for close

          Repeat

            Sleep(250);

            Application.ProcessMessages;

          Until Not OverrideForm.Visible;

        End{ if }

      End;

    omFree: Begin

        If (ReportSystem.SystemFiler.StreamMode In [smTempFile, smFile]) Then Begin

          (OverrideForm As TFormMyPreview).RvRenderPreview.NDRStream.Free;

          (OverrideForm As TFormMyPreview).RvRenderPreview.NDRStream := Nil;

        End{ if }

        FreeAndNil(OverrideForm);

      End;

  End{ case }

End;

 

 

5. Recompile your project using Build All.

 

Run your program and generate a report that uses the modified ReportSystem component. If you see your "New Custom Preview", then you are well on your way. Now, you can go back and modify your custom preview form as you wish.