📄 rm_formreport.pas
字号:
unit RM_FormReport;
{$I RM.INC}
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Printers, Controls, DB,
Forms, StdCtrls, Dialogs, Menus, Buttons, Comctrls, ExtCtrls, DBCtrls, RM_const,
RM_DBRel, RM_DSet, RM_DBSet, RM_Class, RM_view, RM_prntr;
type
TRMGridReportOption = (rmgoUseColor, rmgoStretch, rmgoWordWrap, rmgoGridLines,
rmgoSelectedRecordsOnly, rmgoAppendBlank, rmgoGridNumber, rmgoDrawBorder,
rmgoDoubleFrame, rmgoRebuildAfterPageChanged, rmgoDisableControls);
TRMGridReportOptions = set of TRMGridReportOption;
TRMFRScaleMode = (rmsmAdjust, rmsmFit);
TRMCustomGridReport = class;
TRMFormReport = class;
TRMOnPrintObjectEvent = procedure(aFormReport: TRMFormReport; aPage: TRMPage;
aControl: TControl; var aPrintObjectClass: TClass; var OwnerDraw: Boolean) of object;
TRMOnAfterCreateObjectEvent = procedure(aControl: TControl; aView: TRMView) of object;
TRMOnAfterCreateGridObjectEvent = procedure(aControl: TControl; aFieldName: string; aView: TRMView) of object;
{ TRMPageLayout }
TRMPageLayout = class(TPersistent)
private
FPageSize: Word;
FLeftMargin: integer;
FTopMargin: integer;
FBottomMargin: integer;
FRightMargin: integer;
FColumns: integer;
FColumnSpace: integer;
FPageHeight: integer;
FPageWidth: integer;
FPageOr: TPrinterOrientation;
FPageBin: integer;
FPrinterName: string;
FDoublePass: Boolean;
// FScaleFrameWidth: Boolean;
FPrintBackColor: Boolean;
FTitle: string;
protected
public
constructor Create;
procedure Assign(Source: TPersistent); override;
published
property pgSize: Word read FPageSize write FPageSize default 9;
property LeftMargin: integer read FLeftMargin write FLeftMargin default 36;
property TopMargin: integer read FTopMargin write FTopMargin default 36;
property RightMargin: integer read FRightMargin write FRightMargin default 36;
property BottomMargin: integer read FBottomMargin write FBottomMargin default 36;
property Columns: integer read FColumns write FColumns default 0;
property ColumnSpace: integer read FColumnSpace write FColumnSpace default 0;
property Height: integer read FPageHeight write FPageHeight default 2100;
property Width: integer read FPageWidth write FPageWidth default 2970;
property pgOr: TPrinterOrientation read FPageOr write FPageOr default poPortrait;
property pgBin: integer read FPageBin write FPageBin;
property PrinterName: string read FPrinterName write FPrinterName;
property DoublePass: Boolean read FDoublePass write FDoublePass default False;
// property ScaleFrameWidth: Boolean read FScaleFrameWidth write FScaleFrameWidth;
property PrintBackColor: Boolean read FPrintBackColor write FPrintBackColor;
property Title: string read FTitle write FTitle;
end;
{ TRMPageHeaderFooter }
TRMPageHeaderFooter = class(TPersistent)
private
FCaption: TStrings;
FHeight: Integer;
procedure SetCaption(Value: TStrings);
procedure SetHeight(Value: Integer);
protected
ParentFormReport: TRMCustomGridReport;
procedure GetStrings(aStrings: TStrings);
public
constructor Create;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
procedure Clear;
procedure Add(const AStr: string; AFont: TFont; Align: TAlignment);
procedure LoadFromRichEdit(ARichEdit: TRichEdit);
published
property Caption: TStrings read FCaption write SetCaption;
property Height: Integer read FHeight write SetHeight default 20;
end;
{ TRMGridNumOptions }
TRMGridNumOptions = class(TPersistent)
private
FText: string;
FNumber: integer;
procedure SetNumber(Value: Integer);
public
constructor Create;
procedure Assign(Source: TPersistent); override;
published
property Text: string read FText write FText;
property Number: integer read FNumber write SetNumber default 7;
end;
{ TRMScaleOptions }
TRMScaleOptions = class(TPersistent)
private
FCenterOnPageH: Boolean;
FCenterOnPageV: Boolean;
FFitPageWidth: Boolean;
FFitPageHeight: Boolean;
FScaleMode: TRMFRScaleMode;
FScaleFactor: Integer;
protected
public
constructor Create;
procedure Assign(Source: TPersistent); override;
published
property CenterOnPageH: Boolean read FCenterOnPageH write FCenterOnPageH default False;
property CenterOnPageV: Boolean read FCenterOnPageV write FCenterOnPageV default False;
property FitPageWidth: Boolean read FFitPageWidth write FFitPageWidth default False;
property FitPageHeight: Boolean read FFitPageHeight write FFitPageHeight default False;
property ScaleMode: TRMFRScaleMode read FScaleMode write FScaleMode default rmsmAdjust;
property ScaleFactor: Integer read FScaleFactor write FScaleFactor default 100;
end;
{ TRMGroupItem }
TRMGroupItem = class(TCollectionItem)
private
FGroupFieldName: string;
FFormNewPage: Boolean;
function GetReport: TRMCustomGridReport;
protected
public
constructor Create(Collection: TCollection); override;
procedure Assign(Source: TPersistent); override;
property Report: TRMCustomGridReport read GetReport;
published
property GroupFieldName: string read FGroupFieldName write FGroupFieldName;
property FormNewPage: Boolean read FFormNewPage write FFormNewPage default False;
end;
{ TRMGroupItems }
TRMGroupItems = class(TCollection)
private
FReport: TRMCustomGridReport;
function GetItem(Index: Integer): TRMGroupItem;
procedure SetItem(Index: Integer; Value: TRMGroupItem);
protected
function GetOwner: TPersistent; override;
procedure Update(Item: TCollectionItem); override;
public
constructor Create(aReport: TRMCustomGridReport);
function Add: TRMGroupItem;
property Report: TRMCustomGridReport read FReport;
property Items[Index: Integer]: TRMGroupItem read GetItem write SetItem; default;
end;
{ TRMMasterDataBandOptions }
TRMMasterDataBandOptions = class(TPersistent)
private
FLinesPerPage: Integer;
FColumns: Integer;
FColumnWidth: integer;
FColumnGap: integer;
FNewPageAfter: Boolean;
public
constructor Create;
procedure Assign(Source: TPersistent); override;
published
property LinesPerPage: Integer read FLinesPerPage write FLinesPerPage default 0;
property Columns: Integer read FColumns write FColumns default 1;
property ColumnWidth: Integer read FColumnWidth write FColumnWidth default 200;
property ColumnGap: Integer read FColumnGap write FColumnGap default 20;
property NewPageAfter: Boolean read FNewPageAfter write FNewPageAfter default False;
end;
{ TRMGridFontOptions }
TRMGridFontOptions = class(TPersistent)
private
FUseMaualFont: Boolean;
FFont: TFont;
public
constructor Create;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property UseMaualFont: Boolean read FUseMaualFont write FUseMaualFont default False;
property Font: TFont read FFont write FFont;
end;
TRMPageAggr = class(TPersistent)
private
FAutoTotal: Boolean;
FTotalFields: string;
public
procedure Assign(Source: TPersistent); override;
published
property AutoTotal: Boolean read FAutoTotal write FAutoTotal;
property TotalFields: string read FTotalFields write FTotalFields;
end;
TRMGridPageAggrOptions = class(TPersistent)
private
FPageSum: TRMPageAggr;
FPageSumTotal: TRMPageAggr;
public
constructor Create;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property PageSum: TRMPageAggr read FPageSum write FPageSum;
property PageSumTotal: TRMPageAggr read FPageSumTotal write FPageSumTotal;
end;
{ TRMCustomGridReport }
TRMCustomGridReport = class(TComponent)
private
FAutoBooleanString: string;
FReport: TRMReport;
FReportDataSet: TRMDBDataSet;
FPageHeader: TRMPageHeaderFooter;
FPageFooter: TRMPageHeaderFooter;
FColumnFooter: TRMPageHeaderFooter;
FDataSet: TDataSet;
FDataSource: TDataSource;
FGridPageAggrOptions: TRMGridPageAggrOptions;
FGroups: TRMGroupItems;
FReportOptions: TRMGridReportOptions;
FGridFontOptions: TRMGridFontOptions;
FPageLayout: TRMPageLayout;
FScaleMode: TRMScaleOptions;
FGridNumOptions: TRMGridNumOptions;
FMasterDataBandOptions: TRMMasterDataBandOptions;
FShowPrintDialog: Boolean;
FModifyPrepared: Boolean;
FInitialZoom: TRMPreviewZoom;
FPreviewButtons: TRMPreviewButtons;
FPreview: TRMPreview;
FReportType: TRMReportType;
FReportTitle: string;
FShowProgress: Boolean;
FOnBeginDoc: TRMBeginDocEvent;
FOnEndDoc: TRMEndDocEvent;
FOnBeginBand: TRMBeginBandEvent;
FOnEndBand: TRMEndBandEvent;
FOnBeginPage: TRMBeginPageEvent;
FOnEndPage: TRMEndPageEvent;
FOnGetValue: TRMDetailEvent;
FOnProgress: TRMProgressEvent;
FOnBeginColumn: TRMBeginColumnEvent;
FOnPrintColumn: TRMPrintColumnEvent;
procedure SetGroups(Value: TRMGroupItems);
function GetReport: TRMReport;
function GetReportDataSet: TRMDBDataSet;
procedure SetPageHeader(Value: TRMPageHeaderFooter);
procedure SetPageFooter(Value: TRMPageHeaderFooter);
procedure SetColumnFooter(Value: TRMPageHeaderFooter);
procedure SetMasterDataBandOptions(Value: TRMMasterDataBandOptions);
procedure SetGridNumOptions(Value: TRMGridNumOptions);
procedure SetScaleMode(Value: TRMScaleOptions);
procedure SetPageLayout(Value: TRMPageLayout);
// procedure SetGridFontOptions(Value: TRMGridFontOptions);
procedure OnAfterPreviewPageSetup(Sender: TObject);
// property GridPageAggrOptions: TRMGridPageAggrOptions read FGridPageAggrOptions write FGridPageAggrOptions;
protected
FormWidth: TStringList;
OffsX, OffsY: Integer;
FormHeight: Integer;
PageWidth, PageHeight: Integer;
HaveDetailBand: Boolean;
function CalcWidth(aWidth: Integer): Integer;
procedure AddPage;
procedure CalcRect(t: TRMView; ParentBand: TRMBandView; aFormWidth: Integer);
procedure _InternalShowReport(aFlag: Integer);
procedure SetMemoViewFormat(aView: TRMMemoView; aField: TField);
property Groups: TRMGroupItems read FGroups write SetGroups;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
function CreateReportFromGrid: Boolean; virtual;
procedure AssignFont(aView: TRMMemoView; aFont: TFont);
procedure PrintReport;
procedure ShowReport;
procedure DesignReport;
procedure BuildReport;
procedure PageSetup;
procedure ChangePageLayout(aPageSetting: TRMPageSetting);
property Report: TRMReport read GetReport;
property ReportDataSet: TRMDBDataSet read GetReportDataSet;
published
property DataSet: TDataSet read FDataSet write FDataSet;
property DataSource: TDataSource read FDataSource write FDataSource;
property ReportOptions: TRMGridReportOptions read FReportOptions write FReportOptions;
property PageLayout: TRMPageLayout read FPageLayout write SetPageLayout;
property PageHeader: TRMPageHeaderFooter read FPageHeader write SetPageHeader;
property PageFooter: TRMPageHeaderFooter read FPageFooter write SetPageFooter;
property ColumnFooter: TRMPageHeaderFooter read FColumnFooter write SetColumnFooter;
property ScaleMode: TRMScaleOptions read FScaleMode write SetScaleMode;
property MasterDataBandOptions: TRMMasterDataBandOptions read FMasterDataBandOptions write SetMasterDataBandOptions;
property GridNumOptions: TRMGridNumOptions read FGridNumOptions write SetGridNumOptions;
// property GridFontOptions: TRMGridFontOptions read FGridFontOptions write SetGridFontOptions;
property InitialZoom: TRMPreviewZoom read FInitialZoom write FInitialZoom;
property PreviewButtons: TRMPreviewButtons read FPreviewButtons write FPreviewButtons;
property Preview: TRMPreview read FPreview write FPreview;
property ReportType: TRMReportType read FReportType write FReportType default rtSimple;
property ShowProgress: Boolean read FShowProgress write FShowProgress default True;
property ReportTitle: string read FReportTitle write FReportTitle;
property ShowPrintDialog: Boolean read FShowPrintDialog write FShowPrintDialog default True;
property ModifyPrepared: Boolean read FModifyPrepared write FModifyPrepared default False;
property AutoBooleanString: string read FAutoBooleanString write FAutoBooleanString;
property OnBeginBand: TRMBeginBandEvent read FOnBeginBand write FOnBeginBand;
property OnEndBand: TRMEndBandEvent read FOnEndBand write FOnEndBand;
property OnBeginDoc: TRMBeginDocEvent read FOnBeginDoc write FOnBeginDoc;
property OnEndDoc: TRMEndDocEvent read FOnEndDoc write FOnEndDoc;
property OnBeginPage: TRMBeginPageEvent read FOnBeginPage write FOnBeginPage;
property OnEndPage: TRMEndPageEvent read FOnEndPage write FOnEndPage;
property OnGetValue: TRMDetailEvent read FOnGetValue write FOnGetValue;
property OnProgress: TRMProgressEvent read FOnProgress write FOnProgress;
property OnBeginColumn: TRMBeginColumnEvent read FOnBeginColumn write FOnBeginColumn;
property OnPrintColumn: TRMPrintColumnEvent read FOnPrintColumn write FOnPrintColumn;
end;
{ TRMFormReportObjects }
TRMFormReportObject = class(TObject)
private
FAutoFree: Boolean;
protected
public
constructor Create; virtual;
procedure OnGenerate_Object(aFormReport: TRMFormReport; Page: TRMPage;
Control: TControl; var t: TRMView); virtual; abstract;
property AutoFree: Boolean read FAutoFree write FAutoFree;
end;
{ TRMAddInFormReportObjectInfo }
TRMAddInFormReportObjectInfo = class
private
FClassRef: TClass;
FObjectClass: TClass;
public
constructor Create(AClassRef: TClass; AObjectClass: TClass);
property ClassRef: TClass read FClassRef;
property ObjectClass: TClass read FObjectClass;
end;
{ TRMFormReport }
TRMFormReport = class(TRMCustomGridReport)
private
FGridFixedCols: Integer;
FDrawOnPageFooter: Boolean;
FPageHeaderViews, FPageDetailViews, FPageFooterViews: TList;
FColumnFooterViews: TList;
FGroupFooterViews: TList;
FGridTop, FGridHeight: Integer;
FPrintControl: TWinControl;
FReportObjects: TList;
FOnPrintObject: TRMOnPrintObjectEvent;
FOnAfterCreateObject: TRMOnAfterCreateObjectEvent;
FOnAfterCreateGridFieldObject: TRMOnAfterCreateGridObjectEvent;
procedure Clear;
protected
CanSetDataSet: Boolean;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
function CreateReportFromGrid: Boolean; override;
property PageHeaderViews: TList read FPageHeaderViews;
property PageDetailViews: TList read FPageDetailViews;
property PageFooterViews: TList read FPageFooterViews;
property ColumnFooterViews: TList read FColumnFooterViews;
property GroupFooterViews: TList read FGroupFooterViews;
property GridTop: Integer read FGridTop write FGridTop;
property GridHeight: Integer read FGridHeight write FGridHeight;
property DrawOnPageFooter: Boolean read FDrawOnPageFooter write FDrawOnPageFooter;
published
property Groups;
property PrintControl: TWinControl read FPrintControl write FPrintControl;
property GridFixedCols: Integer read FGridFixedCols write FGridFixedCols default 0;
property OnPrintObject: TRMOnPrintObjectEvent read FOnPrintObject write FOnPrintObject;
property OnAfterCreateObject: TRMOnAfterCreateObjectEvent read FOnAfterCreateObject write FOnAfterCreateObject;
property OnAfterCreateGridObjectEvent: TRMOnAfterCreateGridObjectEvent read FOnAfterCreateGridFieldObject write FOnAfterCreateGridFieldObject;
end;
{ TRMPrintControl }
TRMPrintControl = class(TRMFormReportObject)
public
procedure OnGenerate_Object(aFormReport: TRMFormReport; Page: TRMPage;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -