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

📄 rm_formreport.pas

📁 进销存·完整的·有数据库的·非常完整·只得参考
💻 PAS
📖 第 1 页 / 共 5 页
字号:
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 + -