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

📄 rm_formreport.pas

📁 这是一个功能强大
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit RM_FormReport;

{$I RM.INC}

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, DB,
  Forms, StdCtrls, Dialogs, Menus, Buttons, Comctrls, ExtCtrls, DBCtrls, RM_const,
  RM_DataSet, RM_Class, RM_Preview, RM_Printer, RM_Common, RM_GridReport
  {$IFDEF COMPILER6_UP}, Variants{$ENDIF};

type
  TRMGridReportOption = (rmgoUseColor, rmgoStretch, rmgoWordWrap, rmgoGridLines,
    rmgoSelectedRecordsOnly, rmgoAppendBlank, rmgoGridNumber, rmgoDrawBorder,
    rmgoDoubleFrame, rmgoRebuildAfterPageChanged, rmgoDisableControls);
  TRMGridReportOptions = set of TRMGridReportOption;
  TRMFRScaleMode = (rmsmAdjust, rmsmFit);
  TRMCustomFormReport = class;
  TRMFormReport = class;

  TRMOnPrintObjectEvent = procedure(aFormReport: TRMFormReport; aPage: TRMReportPage;
    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
    FColumnCount: Integer;
    FColumnGap: Integer;
    FPageSize: Word;
    FLeftMargin: integer;
    FTopMargin: integer;
    FBottomMargin: integer;
    FRightMargin: integer;
    FPageHeight: integer;
    FPageWidth: integer;
    FPageOr: TRMPrinterOrientation;
    FPageBin: integer;
    FPrinterName: string;
    FDoublePass: Boolean;
    FPrintBackColor: Boolean;
    FTitle: string;
  protected
  public
    constructor Create;
    procedure Assign(Source: TPersistent); override;
  published
    property ColumnCount: Integer read FColumnCount write FColumnCount default 1;
    property ColumnGap: Integer read FColumnGap write FColumnGap default 0;
    property PageSize: 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 Height: integer read FPageHeight write FPageHeight default 2100;
    property Width: integer read FPageWidth write FPageWidth default 2970;
    property PageOrientation: TRMPrinterOrientation read FPageOr write FPageOr default rmpoPortrait;
    property PageBin: integer read FPageBin write FPageBin;
    property PrinterName: string read FPrinterName write FPrinterName;
    property DoublePass: Boolean read FDoublePass write FDoublePass default False;
    property ColorPrint: 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: TRMCustomFormReport;
    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: TComponent;
  protected
  public
    constructor Create(Collection: TCollection); override;
    procedure Assign(Source: TPersistent); override;
    property Report: TComponent 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: TComponent;
    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: TComponent);
    function Add: TRMGroupItem;
    property Report: TComponent 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;
    FHeight: Integer;
    FReprintColumnHeaderOnNewColumn: 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;
    property Height: Integer read FHeight write FHeight default -1;
    property ReprintColumnHeaderOnNewColumn: Boolean read FReprintColumnHeaderOnNewColumn write FReprintColumnHeaderOnNewColumn default False;
  end;

  { TRMGridFontOptions }
  TRMGridFontOptions = class(TPersistent)
  private
    FUseCustomFontSize: Boolean;
    FFont: TFont;
    procedure SetFont(Value: TFont);
  public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
  published
    property UseCustomFontSize: Boolean read FUseCustomFontSize write FUseCustomFontSize default False;
    property Font: TFont read FFont write SetFont;
  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;

  TRMReportSettings = class(TPersistent)
  private
    FShowPrintDialog: Boolean;
    FModifyPrepared: Boolean;
    FInitialZoom: TRMPreviewZoom;
    FPreviewButtons: TRMPreviewButtons;
    FPreview: TRMPreview;
    FReportTitle: string;
    FShowProgress: Boolean;
  public
    constructor Create;
  published
    property InitialZoom: TRMPreviewZoom read FInitialZoom write FInitialZoom;
    property PreviewButtons: TRMPreviewButtons read FPreviewButtons write FPreviewButtons;
    property Preview: TRMPreview read FPreview write FPreview;
    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;
  end;

  { TRMCustomGridReport }
  TRMCustomGridReport = class(TComponent)
  private
    FAutoBooleanString: string;
    FReport: TRMGridReport;
    FRMDataSets: TList;

    FGroups: TRMGroupItems;
    FReportOptions: TRMGridReportOptions;
    FGridFontOptions: TRMGridFontOptions;

    FPageLayout: TRMPageLayout;
    FPageHeaderMsg: TRMBandMsg;
    FPageFooterMsg: TRMBandMsg;
    FPageCaptionMsg: TRMPageCaptionMsg;

    FGridNumOptions: TRMGridNumOptions;
    FMasterDataBandOptions: TRMMasterDataBandOptions;
    FReportSettings: TRMReportSettings;
    FGridFixedCols: Integer;
    FOnAfterCreateGridFieldObject: TRMOnAfterCreateGridObjectEvent;

    procedure SetGroups(Value: TRMGroupItems);
    function GetReport: TRMGridReport;

    procedure SetMasterDataBandOptions(Value: TRMMasterDataBandOptions);
    procedure SetGridNumOptions(Value: TRMGridNumOptions);
    procedure SetPageLayout(Value: TRMPageLayout);
    procedure SetGridFontOptions(Value: TRMGridFontOptions);

    procedure SetPageHeaderMsg(Value: TRMBandMsg);
    procedure SetPageFooterMsg(Value: TRMBandMsg);
    procedure SetPageCaptionMsg(Value: TRMPageCaptionMsg);

    procedure ClearRMDataSets;
    procedure OnAfterPreviewPageSetup(Sender: TObject);
  protected
    OffsX, OffsY: Integer;
    FormHeight: Integer;
    PageWidth, PageHeight: Integer;
    HaveDetailBand: Boolean;

    function CreateReportFromGrid: Boolean; virtual;
    procedure _InternalShowReport(aFlag: Integer);
    procedure SetMemoViewFormat(aView: TRMMemoView; aField: TField);
    function AddRMDataSet(const aDataSet: TDataSet): TRMDBDataSet;
    procedure AssignFont(aView: TRMMemoView; aFont: TFont);

    property Groups: TRMGroupItems read FGroups write SetGroups;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    procedure PrintReport;
    procedure ShowReport;
    procedure DesignReport;
    procedure BuildReport;
    function PageSetup: Boolean;
    function PageHeaderFooterSetup: Boolean;
    procedure ChangePageLayout(aPageSetting: TRMPageSetting);

    property Report: TRMGridReport read GetReport;
  published
    property ReportOptions: TRMGridReportOptions read FReportOptions write FReportOptions;

    property PageLayout: TRMPageLayout read FPageLayout write SetPageLayout;
    property PageHeaderMsg: TRMBandMsg read FPageHeaderMsg write SetPageHeaderMsg;
    property PageFooterMsg: TRMBandMsg read FPageFooterMsg write SetPageFooterMsg;
    property PageCaptionMsg: TRMPageCaptionMsg read FPageCaptionMsg write SetPageCaptionMsg;

    property MasterDataBandOptions: TRMMasterDataBandOptions read FMasterDataBandOptions write SetMasterDataBandOptions;
    property GridNumOptions: TRMGridNumOptions read FGridNumOptions write SetGridNumOptions;
    property GridFontOptions: TRMGridFontOptions read FGridFontOptions write SetGridFontOptions;
    property ReportSettings: TRMReportSettings read FReportSettings write FReportSettings;
    property AutoBooleanString: string read FAutoBooleanString write FAutoBooleanString;
    property GridFixedCols: Integer read FGridFixedCols write FGridFixedCols default 0;

    property OnAfterCreateGridObjectEvent: TRMOnAfterCreateGridObjectEvent read FOnAfterCreateGridFieldObject write FOnAfterCreateGridFieldObject;
  end;

  { TRMCustomFormReport }
  TRMCustomFormReport = class(TComponent)
  private
    FAutoBooleanString: string;
    FReport: TRMReport;
    //    FReportDataSet: TRMDBDataSet;
    FPageHeader: TRMPageHeaderFooter;
    FPageFooter: TRMPageHeaderFooter;
    FColumnFooter: TRMPageHeaderFooter;
    FDataSet: TDataSet;
    FDetailDataSet: TDataSet;
    FRMDataSets: TList;

    FGroups: TRMGroupItems;
    FReportOptions: TRMGridReportOptions;
    FGridFontOptions: TRMGridFontOptions;
    FPageLayout: TRMPageLayout;
    FScaleMode: TRMScaleOptions;
    FGridNumOptions: TRMGridNumOptions;
    FMasterDataBandOptions: TRMMasterDataBandOptions;
    FReportSettings: TRMReportSettings;

    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 ClearRMDataSets;
    procedure OnAfterPreviewPageSetup(Sender: TObject);
  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: TRMCustomBandView; aFormWidth: Integer);
    procedure _InternalShowReport(aFlag: Integer);
    procedure SetMemoViewFormat(aView: TRMMemoView; aField: TField);
    function AddRMDataSet(const aDataSet: TDataSet): TRMDBDataSet;
    function CreateReportFromGrid: Boolean; virtual;

    property Groups: TRMGroupItems read FGroups write SetGroups;
    property DetailDataSet: TDataSet read FDetailDataSet write FDetailDataSet;
  public
    MainDataSet: TRMDBDataSet;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure AssignFont(aView: TRMMemoView; aFont: TFont);
    procedure PrintReport;
    procedure ShowReport;
    procedure DesignReport;
    procedure BuildReport;
    function PageSetup: Boolean;
    procedure ChangePageLayout(aPageSetting: TRMPageSetting);
    property Report: TRMReport read GetReport;
    //    property ReportDataSet: TRMDBDataSet read GetReportDataSet;
  published
    property DataSet: TDataSet read FDataSet write FDataSet;
    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 ReportSettings: TRMReportSettings read FReportSettings write FReportSettings;
    property AutoBooleanString: string read FAutoBooleanString write FAutoBooleanString;
  end;

  { TRMFormReportObjects }

⌨️ 快捷键说明

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