1

如何在 Delphi 表单上预览 rave 报告?我有一个包含 2 个页面的页面控件:在第一个页面上,用户输入一些数据(姓名、地址……),我希望在第二个页面上预览使用第一页的数据生成的报告。

4

4 回答 4

2

您可以使用 TRvRenderPreview 向任何 TScrollBox 呈现预览:

使用 TRvSystem:

   RvRenderPreview1.ScrollBox := ScrollBox1; // a scrollbox on a TTabSheet

   RvSystem1.DefaultDest := rdFile;
   RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];

   RvSystem1.RenderObject := RvRenderPreview1;
   RvSystem1.DoNativeOutput := false;

   RvSystem1.Execute;
于 2009-10-23T12:47:45.687 回答
2

您可以使用 TRvNDRWriter 组件代替 TRvSystem。

procedure TForm1.Button1Click(Sender: TObject);
begin
  RvProject1.Execute;
  RvRenderPreview1.Render;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  ms: TMemoryStream;
begin
//  RvNDRWriter1.StreamMode := smUser;
//  RvRenderPreview1.ScrollBox := ScrollBox1;
  ms := TMemoryStream.Create;
  RvNDRWriter1.Stream := ms;
  RvRenderPreview1.NDRStream := ms;
end;
于 2009-10-23T14:59:38.277 回答
0

我使用了打印预览,它并不完全相同,但在我的应用程序中就足够了。我不知道是否可以嵌入页面控件。

于 2009-10-23T10:34:58.137 回答
0

使用 TRvProject + TRvNDRWriter + TRvRenderPreview + TMemoryStream + TScrollBox

procedure TForm1.FormCreate(Sender: TObject);
begin
  FNdrStream := TMemoryStream.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FNdrStream.Free;
end;

procedure TForm1.btnPreviewClick(Sender: TObject);
begin
  //load report project file. You can use stored RAV instead
  rvProject.ProjectFile := 'C:\ExecutaveisGerados\Exemplos\sampleRave\sampleRave.rav';
  rvProject.Open;

  //tells rave we will write the report result to a NDR
  rvProject.Engine := rvNdrWriter;

  //ensure empty memory stream
  FNdrStream.Clear;

  //tells NDRWriter where to store ndr file (memory stream)
  rvNdrWriter.StreamMode := smUser;
  rvNdrWriter.Stream := FNdrStream;

  //execute the report using the NDRWriter. Now the Stream holds the NDR file
  rvProject.Execute;

  //tells RenderPreview where to display
  rvRenderPreview.ScrollBox := sbReportPreview;

  //display NDR file from memory stream
  rvRenderPreview.Render(FNdrStream);
end;
于 2019-01-17T12:20:18.920 回答