⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvreport.pas

📁 richview1.7 full.source
💻 PAS
字号:
unit RVReport;

interface

{$I RV_Defs.inc}
uses Windows, Graphics, Classes,
     CRVData, CRVFData, RVRVData, RichView, PtRVData, PtblRV;


type

  TReportRVData = class(TCustomMainPtblRVData)
    private
      StartY,       StartAt,       Y,       DrawItemNo,   CurHeight: Integer;
      StoredStartY, StoredStartAt, StoredY, StoredDrawItemNo: Integer;
      Splitting: Boolean;
      StoredSplitting: Boolean;
      procedure Init(ACanvas: TCanvas; APageWidth: Integer);
      function FormatNextPage(AMaxHeight: Integer): Boolean;
      procedure UnformatLastPage;
      function Finished: Boolean;
      procedure Reset;
    protected
      function ShareItems: Boolean; override;
    public
      function GetHeight: Integer; override;
  end;

  TReportRichView = class(TCustomPrintableRV)
    private
      function GetHeight: Integer;
      function GetWidth: Integer;
      function GetLeft: Integer;
      function GetTop: Integer;
    protected
      function GetDataClass: TRichViewRVDataClass; override;
    public
      constructor Create(AOwner: TComponent); override;
    published
      { Published standard properties }
      property Color default clNone;
      { Published RichView properties }
      property BackgroundBitmap;
      property BackgroundStyle;
      property BiDiMode;
      property BottomMargin;
      property Delimiters;
      property LeftMargin;
      property Options;
      property RightMargin;
      property RTFOptions;
      property RTFReadProperties;
      property RVFOptions;
      property RVFParaStylesReadMode;
      property RVFTextStylesReadMode;
      property Style;
      property TopMargin;
      { Published RichView events }
      property OnControlAction;
      property OnHTMLSaveImage;
      property OnRVFImageListNeeded;
      property OnRVFControlNeeded;
      property OnRVFPictureNeeded;
      property OnSaveComponentToFile;
      property OnURLNeeded;
      property Width: Integer read GetWidth;
      property Height: Integer read GetHeight;
      property Left: Integer read GetLeft;
      property Top: Integer read GetTop;
  end;

  TRVReportHelper = class (TCustomRVPrint)
    private
      function GetRichView: TReportRichView;
    protected
      function CreateRichView: TCustomPrintableRV; override;
    public
      procedure Init(ACanvas: TCanvas; APageWidth: Integer);
      function FormatNextPage(AMaxHeight: Integer): Boolean;
      procedure UnformatLastPage;
      function Finished: Boolean;
      procedure DrawPage(APageNo: Integer; ACanvas: TCanvas;
                         APreview: Boolean;
                         AHeight: Integer);
      procedure DrawPageAt(Left, Top, APageNo: Integer; ACanvas: TCanvas;
                         APreview: Boolean;
                         AHeight: Integer);
      procedure Reset;
    {$IFDEF RICHVIEWDEF6}
    published
    {$ENDIF}
      property RichView: TReportRichView read GetRichView;
  end;

implementation

{============================ TRVReportData ===================================}
function TReportRVData.ShareItems: Boolean;
begin
  Result := False;
end;
{------------------------------------------------------------------------------}
procedure TReportRVData.Reset;
begin
  PagesColl.Clear;
  DrawItemNo := 0;
  Splitting  := False;
end;
{------------------------------------------------------------------------------}
procedure TReportRVData.Init(ACanvas: TCanvas; APageWidth: Integer);
begin
  Reset;

  PrinterCanvas := ACanvas;
  TmpLM := 0;
  TmpTM := 0;

  FTopMarginPix    := TCustomRichView(FRichView).TopMargin;
  FBottomMarginPix := TCustomRichView(FRichView).BottomMargin;

  Prepare;
  State := State+[rvstSkipformatting];
  try
    TCustomRichView(FRichView).VScrollVisible := False;
    TCustomRichView(FRichView).HScrollVisible := False;
    FRichView.ClientWidth := APageWidth;
    FRichView.ClientHeight:= APageWidth;
  finally
    State := State-[rvstSkipformatting];
  end;
  TCustomRichView(FRichView).MaxTextWidth :=
    MulDiv(FRichView.Width, PrnSaD.ppixScreen, PrnSaD.ppixDevice);
  Format_(False, True, False, 0, PrinterCanvas, False, False);
end;
{------------------------------------------------------------------------------}
function TReportRVData.Finished: Boolean;
begin
  Result := (DrawItems.Count=0) or (DrawItemNo>=DrawItems.Count);
end;
{------------------------------------------------------------------------------}
function TReportRVData.FormatNextPage(AMaxHeight: Integer): Boolean;
begin
  Result := not Finished;
  if Result then begin
    StoredDrawItemNo := DrawItemNo;
    StoredStartAt    := StartAt;
    StoredStartY     := StartY;
    StoredY          := Y;
    StoredSplitting := Splitting;
    inherited FormatNextPage(DrawItemNo, StartAt, StartY, Y, Splitting, AMaxHeight);
  end;
end;
{------------------------------------------------------------------------------}
procedure TReportRVData.UnformatLastPage;
begin
  PagesColl.Items[PagesColl.Count-1].Free;
  DrawItemNo := StoredDrawItemNo;
  StartAt    := StoredStartAt;
  StartY     := StoredStartY;
  Y          := StoredY;
  Splitting  := StoredSplitting;
end;
{------------------------------------------------------------------------------}
function TReportRVData.GetHeight: Integer;
begin
  Result := CurHeight;
end;
{================================ TReportRichView =============================}
constructor TReportRichView.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Name := 'RichView';
  Flags := Flags - [rvflShareContents];
  {$IFDEF RICHVIEWDEF6}
  SetSubComponent(True);
  {$ENDIF}
end;
{------------------------------------------------------------------------------}
function TReportRichView.GetDataClass: TRichViewRVDataClass;
begin
  Result := TReportRVData;
end;
{------------------------------------------------------------------------------}
function TReportRichView.GetHeight: Integer;
begin
  Result := inherited Height;
end;
{------------------------------------------------------------------------------}
function TReportRichView.GetLeft: Integer;
begin
  Result := inherited Left;
end;
{------------------------------------------------------------------------------}
function TReportRichView.GetTop: Integer;
begin
  Result := inherited Top;
end;
{------------------------------------------------------------------------------}
function TReportRichView.GetWidth: Integer;
begin
  Result := inherited Width;
end;
{================================ TRVReportHelper =============================}
function TRVReportHelper.CreateRichView: TCustomPrintableRV;
begin
  Result := TReportRichView.Create(Self);
end;
{------------------------------------------------------------------------------}
procedure TRVReportHelper.Init(ACanvas: TCanvas; APageWidth: Integer);
begin
  TReportRVData(TReportRichView(rv).RVData).Init(ACanvas,APageWidth);
end;
{------------------------------------------------------------------------------}
function TRVReportHelper.Finished: Boolean;
begin
  Result := TReportRVData(TReportRichView(rv).RVData).Finished;
end;
{------------------------------------------------------------------------------}
function TRVReportHelper.FormatNextPage(AMaxHeight: Integer): Boolean;
begin
  Result := TReportRVData(TReportRichView(rv).RVData).FormatNextPage(AMaxHeight);
end;
{------------------------------------------------------------------------------}
procedure TRVReportHelper.UnformatLastPage;
begin
  TReportRVData(TReportRichView(rv).RVData).UnformatLastPage;
end;
{------------------------------------------------------------------------------}
function TRVReportHelper.GetRichView: TReportRichView;
begin
  Result := TReportRichView(rv);
end;
{------------------------------------------------------------------------------}
procedure TRVReportHelper.DrawPage(APageNo: Integer; ACanvas: TCanvas;
  APreview: Boolean; AHeight: Integer);
begin
  TReportRVData(TReportRichView(rv).RVData).CurHeight := AHeight;
  rv.DrawPage(APageNo, ACanvas, APreview, PreviewCorrection);
end;
{------------------------------------------------------------------------------}
procedure TRVReportHelper.DrawPageAt(Left, Top, APageNo: Integer;
  ACanvas: TCanvas; APreview: Boolean; AHeight: Integer);
var pt: TPoint;
begin
  SetViewportOrgEx(ACanvas.Handle, Left, Top, @pt);
  DrawPage(APageNo, ACanvas, APreview, AHeight);
  SetViewportOrgEx(ACanvas.Handle, pt.x, pt.y, nil);
end;
{------------------------------------------------------------------------------}
procedure TRVReportHelper.Reset;
begin
  TReportRVData(TReportRichView(rv).RVData).Reset;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -