Delphi 7 中使用RAVE报表(七)

来源:互联网 发布:毒品网络 下载 magnet 编辑:程序博客网 时间:2024/05/17 09:15

Delphi 7 中使用RAVE报表(七)

----  一些技巧

作为《Delphi 7 中使用RAVE报表》的最后,整理一些技巧给大家。
1.设计好的Rave报表文件如何打包到EXE文件中?
       在Rvproject的属性中有一个StoreRav,只要load对应的rav文件即可!
同时最好把对应rvproject的ProjectFile属性清空。
2.如何显示中文化的打印预览对话框?
      拷贝C:/Rave5/Source目录中的RpFormPreview.pas和RpFormPreview.dfm到对应的项
目目录中。
      把RpFormPreview.pas加入到对应的项目文件中,把对应窗体的名字从
RavePreviewForm更改为SCRavePreviewForm;将文件RpFormPreview.pas另存为
SCFormPreview.pas。
      把窗体SCRavePreviewForm中的对应文字从英文更改为中文。
      在主窗体上加上 RvProject和 RvSystem部件,通过设定RvProject.Engine为
RvSystem部件来把两者挂接。    
      设置RvSystem部件的OverridePreview事件过程为以下代码:
procedure TForm1.RvSystem1OverridePreview(ReportSystem: TRvSystem;
  OverrideMode: TOverrideMode; var OverrideForm: TForm);
begin
    Case OverrideMode Of
    omCreate:
    Begin
        OverrideForm := TSCRavePreviewForm.Create(self);
        //OverrideForm.Caption := ReportSystem.TitlePreview;
        OverrideForm.Width := ReportSystem.SystemPreview.FormWidth;
        OverrideForm.Height := ReportSystem.SystemPreview.FormHeight;
        OverrideForm.WindowState := ReportSystem.SystemPreview.FormState;
        (OverrideForm As TSCRavePreviewForm).ReportSystem := ReportSystem;
    End;
    omShow:
    Begin
        ReportSystem.SystemPreview.InitPreview((OverrideForm As 
TSCRavePreviewForm).RvRenderPreview);
        If Assigned(ReportSystem.OnPreviewSetup) Then
        Begin
          ReportSystem.OnPreviewSetup((OverrideForm As 
TSCRavePreviewForm).RvRenderPreview);
        End; { if }
        (OverrideForm As TSCRavePreviewForm).InputFileName := 
ReportSystem.SystemFiler.Filename;
        (OverrideForm As TSCRavePreviewForm).InputStream := 
ReportSystem.SystemFiler.Stream;
        (OverrideForm As TSCRavePreviewForm).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 TSCRavePreviewForm).RvRenderPreview.NDRStream.Free;
            (OverrideForm As TSCRavePreviewForm).RvRenderPreview.NDRStream := 
Nil;
        End; { if }
        FreeAndNil(OverrideForm);
    End;
    End; { case }
end;
       编译运行这个项目,其打印预览窗口就会变成中文的了。
     备注:这种方式进行中文化不会受到RAVE版本升级的影响。
3.如何显示中文化的打印设置对话框?
      拷贝C:/Rave5/Source目录中的RpFormSetup.pas和RpFormSetup.dfm到对应的项目目
录中。
      把RpFormSetup.pas加入到对应的项目文件中,把对应窗体的名字从RPSetupForm更改
SCSetupForm;将文件RpFormSetup.pas另存为SCFormSetup.pas。
      把窗体SCSetupForm中的对应文字从英文更改为中文。
      在主窗体上加上 RvProject和 RvSystem部件,通过设定RvProject.Engine为
RvSystem部件来把两者挂接。    
      设置RvSystem部件的OverrideSetup事件过程为以下代码:
procedure TForm1.RvSystem1OverrideSetup(ReportSystem: TRvSystem;
  OverrideMode: TOverrideMode; var OverrideForm: TForm);
begin
    case
    OverrideMode of
    omCreate:
    begin
        OverrideForm := TSCSetupForm.Create(nil);
        //OverrideForm.Caption := RvSystem1.TitleSetup;
        (OverrideForm as TSCSetupForm).ReportSystem := ReportSystem;
    end;
    omShow:
    begin
        with OverrideForm as TSCSetupForm, ReportSystem do
        begin
          PreviewSetup := False;
          Aborted := ShowModal = mrCancel;
        end;
    end;
    omWait:
    begin
     {because showModal: no wait necessary!}
    end;
    omFree:
    begin
        OverrideForm.Free;
    end;
    end;
end;
       编译运行这个项目,其打印设置对话框就会变成中文的了!
       这种方式进行中文化不会受到RAVE版本升级的影响!
       对于其它对话框应该可以同法炮制吧!
 4.如何自已做预览窗口?
创建一个窗口,在上面放RvProject组件、RvNDRWriter组件、RvRenderPreview组件和ScrollBox组件,设定以下几个部件间的联系关系:
RvProject.Engine:=RvNDRWriter;
RvRenderPreview.ScrollBox:=ScrollBox;
设定RvNDRWriter.filename为 demo.ndr ;
进行预览的代码为:
var
  NDRStream:TMemoryStream;
begin
  //建立内存流
  NDRStream:=TMemoryStream.Create 
  //输出报表数据
  RvProject1.Execute 
  //将报表数据调入内存流中供预览
  NDRStream.LoadFromFile('demo.ndr');
  //预览相应的报表,使用的是相应的内存流。
  RvRenderPreview1.Render(NDRStream);
  ShowButton();
end;
 
要想在你的项目中很好的应用RAVE做好报表,更多的内容参考/Rave5/Docs/下的RAVE手册。
 
 

 

原创粉丝点击