📄 rvreport.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 + -