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

📄 rm_class.pas

📁 这是一个功能强大
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    property Brush: TBrush read FBrush write SetBrush;
    property ReprintOnOverFlow;
    property ShiftWith;
    property StretchWith;
    property FillColor;
    property LeftFrame;
    property TopFrame;
    property RightFrame;
    property BottomFrame;
    property ShadowStyle;
    property Printable;
    property Url;
    property OnPreviewClick;
    property OnPreviewClickUrl;
  end;

  { TRMOutlineView }
  TRMOutlineView = class(TRMReportView)
  private
    FCaption: string;
    FPageNo: Integer;
    FLevel: Integer;

    function GetOutlineText: string;
  protected
    procedure Prepare; override;
    procedure PlaceOnEndPage(aStream: TStream); override;
  public
    constructor Create; override;
    destructor Destroy; override;

    procedure DefinePopupMenu(aPopup: TRMCustomMenuItem); override;
    procedure LoadFromStream(aStream: TStream); override;
    procedure SaveToStream(aStream: TStream); override;
    procedure Draw(aCanvas: TCanvas); override;

    property OutlineText: string read GetOutlineText;
  published
  end;

  { TRMSubReportView }
  TRMSubReportView = class(TRMReportView)
  private
    FSubPage: Integer;
    FSubReportType: TRMSubReportType;
    FCanPrint: Boolean;

    function GetPage: TRMReportPage;
    function GetReprintLastPage: Boolean;
    procedure SetReprintLastPage(Value: Boolean);
  protected
    procedure Prepare; override;
    function GetViewCommon: string; override;
    function DrawAsPicture: Boolean; override;
  public
    class function CanPlaceOnGridView: Boolean; override;
    constructor Create; override;
    destructor Destroy; override;
    procedure DefinePopupMenu(aPopup: TRMCustomMenuItem); override;

    procedure LoadFromStream(aStream: TStream); override;
    procedure SaveToStream(aStream: TStream); override;
    procedure Draw(aCanvas: TCanvas); override;
    property SubPage: Integer read FSubPage write FSubPage;
    property Page: TRMReportPage read GetPage;
  published
    property SubReportType: TRMSubReportType read FSubReportType write FSubReportType;
    property ReprintLastPage: Boolean read GetReprintLastPage write SetReprintLastPage;
  end;

  { TRMCustomBandView }
  TRMCustomBandView = class(TRMReportView)
  private
    FFont: TFont;
    FBandType: TRMBandType;
    FIsVirtualDataSet: Boolean;
    FDataSetName: string;
    FLinesPerPage: Integer;
    FNewPageCondition: string;
    FRangeBegin: TRMRangeBegin;
    FRangeEnd: TRMRangeEnd;
    FRangeEndCount: Integer;
    FmmColumnGap: Integer;
    FColumns: Integer;
    FmmColumnWidth, FmmColumnOffset: Integer;
    FGroupCondition: string;
    FChildBandName: string;
    FFlags1: LongWord;
    FMasterBand: string;
    FDataBandName: string;
    FOutlineText: string;

    FOnAfterPrint: TNotifyEvent;
    FOnBeforePrintRecord: TRMBandBeforePrintRecordEvent;

    procedure OnNewPageAfterClick(Sender: TObject);
    procedure OnPrintIfSubsetEmptyClick(Sender: TObject);
    procedure OnPageBreakedClick(Sender: TObject);
    procedure OnPrintOnFirstPageClick(Sender: TObject);
    procedure OnPrintOnLastPageClick(Sender: TObject);
    procedure OnReprintOnNewPageClick(Sender: TObject);
    procedure OnAutoAppendBlankClick(Sender: TObject);
    procedure OnStretchedClick(Sender: TObject);
    procedure OnKeepFooterClick(Sender: TObject);
    procedure OnKeepTogetherClick(Sender: TObject);
    procedure OnKeepChildClick(Sender: TObject);

    procedure SetFont(Value: TFont);
    function GetPrintOnFirstPage: Boolean;
    procedure SetPrintOnFirstPage(Value: Boolean);
    function GetPrintOnLastPage: Boolean;
    procedure SetPrintOnLastPage(Value: Boolean);
    function GetPrintIfSubsetEmpty: Boolean;
    procedure SetPrintIfSubsetEmpty(Value: Boolean);
    function GetAutoAppendBlank: Boolean;
    procedure SetAutoAppendBlank(Value: Boolean);
    function GetAppendBlankOnce: Boolean;
    procedure SetAppendBlankOnce(Value: Boolean);
    function GetNewPageAfter: Boolean;
    procedure SetNewPageAfter(Value: Boolean);
    function GetNewPageBefore: Boolean;
    procedure SetNewPageBefore(Value: Boolean);
    function GetPageBreaked: Boolean;
    procedure SetPageBreaked(Value: Boolean);
    function GetHideIfEmpty: Boolean;
    procedure SetHideIfEmpty(Value: Boolean);
    function GetReprintOnNewPage: Boolean;
    procedure SetReprintOnNewPage(Value: Boolean);
    function GetReprintOnNewColumn: Boolean;
    procedure SetReprintOnNewColumn(Value: Boolean);
    function GetKeepFooter: Boolean;
    procedure SetKeepFooter(Value: Boolean);
    function GetKeepTogether: Boolean;
    procedure SetKeepTogether(Value: Boolean);
    function GetKeepChild: Boolean;
    procedure SetKeepChild(Value: Boolean);
    function GetPrintatDesignPos: Boolean;
    procedure SetPrintatDesignPos(Value: Boolean);
    function GetspColumnGap(index: Integer): Integer;
    procedure SetspColumnGap(index: Integer; Value: Integer);
    function GetColumnGap(index: Integer): Double;
    procedure SetColumnGap(index: Integer; Value: Double);
    function GetPrintColumnFirst: Boolean;
    procedure SetPrintColumnFirst(Value: Boolean);
    function GetPrintBeforeSummaryBand: Boolean;
    procedure SetPrintBeforeSummaryBand(Value: Boolean);
    function GetPrintChildIfInvisible: Boolean;
    procedure SetPrintChildIfInvisible(Value: Boolean);
    procedure SetChildBandName(Value: string);
    function GetAdjustColumns: Boolean;
    procedure SetAdjustColumns(Value: Boolean);
    function GetAlignToBottom: Boolean;
    procedure SetAlignToBottom(Value: Boolean);

    procedure SetGroupHeaderBandName(Value: string);
    procedure SetDataSetName(Value: string);
    procedure SetMasterBand(Value: string);
    procedure SetDataBandName(Value: string);
    procedure SetGroupCondition(Value: string);
    procedure SetOutlineText(Value: string);
    function GetPrintIfEmpty: Boolean;
    procedure SetPrintIfEmpty(Value: Boolean);
    procedure SetNewPageCondition(Value: string);
    procedure SetRangeEndCount(Value: Integer);
    //xyxb Add
    function GetCalcPriority: Boolean;
    procedure SetCalcPriority(Value: Boolean);
  protected
    property AlignToBottom: Boolean read GetAlignToBottom write SetAlignToBottom;
    property PrintOnFirstPage: Boolean read GetPrintOnFirstPage write SetPrintOnFirstPage;
    property PrintOnLastPage: Boolean read GetPrintOnLastPage write SetPrintOnLastPage;
    property PrintIfSubsetEmpty: Boolean read GetPrintIfSubsetEmpty write SetPrintIfSubsetEmpty;
    property AutoAppendBlank: Boolean read GetAutoAppendBlank write SetAutoAppendBlank;
    property AppendBlankOnce: Boolean read GetAppendBlankOnce write SetAppendBlankOnce;
    property LinesPerPage: Integer read FLinesPerPage write FLinesPerPage;
    property NewPageCondition: string read FNewPageCondition write SetNewPageCondition;
    property NewPageAfter: Boolean read GetNewPageAfter write SetNewPageAfter;
    property NewPageBefore: Boolean read GetNewPageBefore write SetNewPageBefore;
    property PageBreaked: Boolean read GetPageBreaked write SetPageBreaked;
    property AllowSplit: Boolean read GetPageBreaked write SetPageBreaked;
    property GroupHeaderBandName: string read FMasterBand write SetGroupHeaderBandName;
    property MasterBandName: string read FMasterBand write SetMasterBand; // GroupHeader Band 有的
    property DataBandName: string read FDataBandName write SetDataBandName;
    property HideIfEmpty: Boolean read GetHideIfEmpty write SetHideIfEmpty;
    property ReprintOnNewPage: Boolean read GetReprintOnNewPage write SetReprintOnNewPage;
    property ReprintOnEveryPage: Boolean read GetReprintOnNewPage write SetReprintOnNewPage;
    property ReprintOnNewColumn: Boolean read GetReprintOnNewColumn write SetReprintOnNewColumn;
    property KeepFooter: Boolean read GetKeepFooter write SetKeepFooter;
    property KeepTogether: Boolean read GetKeepTogether write SetKeepTogether;
    property KeepChild: Boolean read GetKeepChild write SetKeepChild;
    property PrintColumnFirst: Boolean read GetPrintColumnFirst write SetPrintColumnFirst;
    property Columns: Integer read FColumns write FColumns;
    property mmColumnGap: Integer read FmmColumnGap write FmmColumnGap;
    property mmColumnWidth: Integer read FmmColumnWidth write FmmColumnWidth;
    property mmColumnOffset: Integer read FmmColumnOffset write FmmColumnOffset;
    property spColumnGap: Integer index 0 read GetspColumnGap write SetspColumnGap;
    property spColumnWidth: Integer index 1 read GetspColumnGap write SetspColumnGap;
    property spColumnOffset: Integer index 2 read GetspColumnGap write SetspColumnGap;
    property ColumnGap: Double index 0 read GetColumnGap write SetColumnGap;
    property ColumnWidth: Double index 1 read GetColumnGap write SetColumnGap;
    property ColumnOffset: Double index 2 read GetColumnGap write SetColumnGap;
    property GroupCondition: string read FGroupCondition write SetGroupCondition;
    property PrintCondition: string read FGroupCondition write SetGroupCondition;
    property OutlineText: string read FOutlineText write SetOutlineText;
    property PrintAtDesignPos: Boolean read GetPrintatDesignPos write SetPrintatDesignPos;
    property DataSetName: string read FDataSetName write SetDataSetName;
    property RangeBegin: TRMRangeBegin read FRangeBegin write FRangeBegin;
    property RangeEnd: TRMRangeEnd read FRangeEnd write FRangeEnd;
    property RangeEndCount: integer read FRangeEndCount write SetRangeEndCount;
    property PrintBeforeSummaryBand: Boolean read GetPrintBeforeSummaryBand write SetPrintBeforeSummaryBand;
    property ChildBand: string read FChildBandName write SetChildBandName;
    property PrintChildIfInvisible: Boolean read GetPrintChildIfInvisible write SetPrintChildIfInvisible;
    property PrintIfEmpty: Boolean read GetPrintIfEmpty write SetPrintIfEmpty;
    property AdjustColumns: Boolean read GetAdjustColumns write SetAdjustColumns;
    //xyxb Add
    property CalcPriority: Boolean read GetCalcPriority write SetCalcPriority;

    property OnBeforePrintRecord: TRMBandBeforePrintRecordEvent read FOnBeforePrintRecord write FOnBeforePrintRecord;
  public
    class function CanPlaceOnGridView: Boolean; override;
    constructor Create; override;
    destructor Destroy; override;
    procedure LoadFromStream(aStream: TStream); override;
    procedure SaveToStream(aStream: TStream); override;
    procedure DefinePopupMenu(aPopup: TRMCustomMenuItem); override;

    function GetClipRgn(rt: TRMRgnType): HRGN; override;
    procedure Draw(aCanvas: TCanvas); override;
    property IsVirtualDataSet: Boolean read FIsVirtualDataSet;
    property BandType: TRMBandType read FBandType;
  published
    property Font: TFont read FFont write SetFont;
    //    property ParentFont;
    property OnAfterPrint: TNotifyEvent read FOnAfterPrint write FOnAfterPrint;
  end;

  { TRMBand }
  TRMBand = class(TRMCustomBandView) // 打印时用的
  private
    FPositions: array[TRMDatasetPosition] of Integer;
    FLastGroupValue: Variant;
    FSaveRangeBegin: TRMRangeBegin;
    FSaveRangeEnd: TRMRangeEnd;
    FSaveRangeEndCount: Integer;
    FCurrentColumn: Integer;
    FNowLine: LongInt;
    FLevel: Integer;
    FFirstPage: Boolean;
    FInPageBreakFlag: Boolean;
    FLastPageNo: Integer;
    FStartPageNo: Integer;

    FAggrCount: Integer;
    FAggrValues: TRMVariables;

    FCrossCurX: Integer;
    FNowGroupBand: TRMBand;
    FAggrBand: TRMBand;
    FDisableBandScript: Boolean;
    FBandChild: TRMBand;
    FNextGroup, FPrevGroup: TRMBand;
    FFirstGroup, FLastGroup: TRMBand;
    FHeaderBand, FFooterBand, FDataBand, FLastBand: TRMBand;
    FMasterDataBand: TRMBand;
    FCalculatedHeight: Integer;
    FNeedChangeHeight, FNeedUnStretchObjects: Boolean;
    FmmColumnXAdjust: Integer;
    FSaveXAdjust, FSaveLastY, FSaveTop, FSaveMaxY: Integer;
    //FMaxColumns: Integer;
    FMaxY: Integer;
    FObjects: TList;
    FSubReports: TList;
    FKeepPage_FirstTime: Boolean;
    FNeedDecKeepPageCount: Boolean;
    FOriginalObjectsCount: Integer;
    //    FCallNewPage, FCallNewColumn: Integer;

    procedure MakeOutlineText;
    procedure DrawRepeatHeader(aNewColumn: Boolean);
    procedure DoAggregate(aDataBand: TRMBand);
    procedure InitValues;
    procedure StretchObjects;
    procedure UnStretchObjects;
    function CalcBandHeight: Integer;
    function CalcChildBandHeight: Integer;
    function CheckSpace(aTop, aHeight: Integer; aAddColumn: Boolean): Boolean;
    procedure MakeSpace;
    procedure MakeColumns;
    procedure PrintObject(t: TRMReportView);
    function PrintObjects(aDrawPageBreaked: Boolean): Boolean;
    function PrintSubReports: Boolean;

    //procedure PrintCrossCell(aParentBand: TRMBand; aCurrentX: Integer);
    function CrossCheckPageBreak(aBand: TRMBand; aNewPage: Boolean): Boolean;
    procedure ShowCrossBand(aBand: TRMBand);
    procedure DoPrintCross(aMasterBand: TRMBand; aBandType: TRMBandType;
      aNowLevel: Integer; var aBndStackTop: Integer; var aBndStack: array of TRMBand);
    procedure PrintCross;
    function HasCross: Boolean;

    procedure PrintPageBreak(aNeedNewPage: Boolean);
    procedure DoPrint;
    function Print: Boolean;
    procedure AddAggregateValue(const aStr: string; aValue: Variant);
    function GetAggregateValue(const aStr: string): Variant;
  protected
    function GetPropValue(aObject: TObject; aPropName: string; var aValue: Variant; aArgs: array of Variant): Boolean; override;

    procedure Prepare; override;
    procedure UnPrepare; override;
  public
    constructor Create; override;
    destructor Destroy; override;

    property Objects: TList read FObjects;
    property DataSet: TRMDataSet read FDataSet;
    property AggrValues: TRMVariables read FAggrValues;
  end;

  TRMBandReportTitle = class(TRMBand)
  private
  protected
  public
    constructor Create; override;
    property PageBreaked;
  published
    property HideIfEmpty;
    //    property NewPageAfter;
    property Stretched;
    property AllowSplit;
    property ChildBand;
    property KeepChild;
    property PrintChildIfInvisible;
    property OutlineText;
  end;

  TRMBandReportSummary = class(TRMBand)
  private
  protected
  public
    constructor Create; override;
  published
    property HideIfEmpty;
    //    property NewPageAfter;
    property Stretched;
    //property PageBreaked;
    property ChildBand;
    property KeepChild;
    property PrintChildIfInvisible;
    property AlignToBottom;
    property OutlineText;

⌨️ 快捷键说明

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