cxgridchartview.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,502 行 · 第 1/5 页

PAS
1,502
字号
    procedure PrepareCanvasForDrawText; override;
    property ViewInfo: TcxGridChartToolBoxDataLevelActiveValueViewInfo read GetViewInfo;
  end;

  TcxGridChartToolBoxDataLevelInfoPainter = class(TcxCustomGridCellPainter)
  protected
    procedure DrawBackground; override;
    function ExcludeFromClipRect: Boolean; override;
  end;

  TcxGridChartToolBoxCustomizeButtonPainter = class(TcxCustomGridCellPainter)
  private
    function GetViewInfo: TcxGridChartToolBoxCustomizeButtonViewInfo;
  protected
    procedure Paint; override;
    property ViewInfo: TcxGridChartToolBoxCustomizeButtonViewInfo read GetViewInfo; 
  end;

  TcxGridChartToolBoxDiagramSelectorPainter = class(TcxCustomGridCellPainter)
  private
    function GetViewInfo: TcxGridChartToolBoxDiagramSelectorViewInfo;
  protected
    procedure DrawContent; override;
    procedure DrawImage; virtual;
    procedure PrepareCanvasForDrawText; override;
    property ViewInfo: TcxGridChartToolBoxDiagramSelectorViewInfo read GetViewInfo;
  end;

  TcxGridChartToolBoxPainter = class(TcxCustomGridCellPainter)
  private
    function GetViewInfo: TcxGridChartToolBoxViewInfo;
  protected
    procedure DrawContent; override;
    procedure DrawDataLevelInfoConnectors; virtual;
    procedure DrawItems(AOpaqueItems: Boolean); virtual;
    function ExcludeFromClipRect: Boolean; override;
    property ViewInfo: TcxGridChartToolBoxViewInfo read GetViewInfo;
  end;

  // view

  TcxGridChartPainter = class(TcxCustomGridPainter)
  private
    function GetViewInfo: TcxGridChartViewInfo;
  protected
    procedure PaintAfter; override;
    procedure PaintContent; override;
  public
    property ViewInfo: TcxGridChartViewInfo read GetViewInfo;
  end;

  { view data }

  TcxGridChartViewData = class(TcxCustomGridViewData)
  private
    FDataGroupIndex: Integer;
    FSumOfValues: TVariantArray;
    function GetCategory(AIndex: Integer): Variant;
    function GetCategoryCount: Integer;
    function GetChildCount: Integer;
    function GetChildDataGroupIndex(Index: Integer): Integer;
    function GetChildLevel: Integer;
    function GetChildRecordIndex(Index: Integer): Integer;
    function GetDataGroupIndex: Integer;
    function GetGridView: TcxGridChartView;
    function GetGroupValue(ADataGroupIndex, AIndex: Integer): Variant;
    function GetSumOfValues(ASeriesIndex: Integer): Variant;
    function GetValue(ASeriesIndex, AIndex: Integer): Variant;
    function GetVisibleCategory(AIndex: Integer): Variant;
    function GetVisibleCategoryCount: Integer;
    function GetVisibleGroupValue(AVisibleDataGroupIndex, AIndex: Integer): Variant;
    function GetVisibleGroupValueCount(AVisibleDataGroupIndex: Integer): Integer;
    function GetVisibleValue(ASeriesIndex, AIndex: Integer): Variant;
    procedure SetCategory(AIndex: Integer; const Value: Variant);
    procedure SetCategoryCount(Value: Integer);
    procedure SetGroupValue(ADataGroupIndex, AIndex: Integer; const Value: Variant);
    procedure SetValue(ASeriesIndex, AIndex: Integer; const Value: Variant);
  protected
    function CalculateDataGroupIndex: Integer; virtual;
    function CalculateSumOfValues(ASeriesIndex: Integer): Variant; virtual;
    procedure CheckValueAtLevel(ALevel: Integer; var AValue: Variant);
    function GetDataGroupIndexByLevel(ALevel: Integer): Integer;
    function GetRecordIndexByValueIndex(AValueIndex: Integer): Integer;
    procedure DataLevelsChanged; virtual;
    function IsDataGrouped: Boolean;
    function IsSummaryLevel: Boolean;
    procedure CalculateSumsOfValues;
    procedure SeriesPosChanged(ASeries: TcxGridChartSeries); virtual;
    procedure Update(AInfo: TcxUpdateControlInfo); virtual;
    procedure UpdateDataGroupIndex;
    procedure UpdateSumsOfValues;

    property ChildCount: Integer read GetChildCount;
    property ChildDataGroupIndex[Index: Integer]: Integer read GetChildDataGroupIndex;
    property ChildLevel: Integer read GetChildLevel;
    property ChildRecordIndex[Index: Integer]: Integer read GetChildRecordIndex;
    property DataGroupIndex: Integer read GetDataGroupIndex;
  public
    constructor Create(AGridView: TcxCustomGridView); override;
    procedure GetVisibleGroupValues(ADataGroup: TcxGridChartDataGroup; AStrings: TStrings;
      out AValues: TVariantArray);

    property GridView: TcxGridChartView read GetGridView;
    property SumOfValues[ASeriesIndex: Integer]: Variant read GetSumOfValues;

    // all values
    property Categories[AIndex: Integer]: Variant read GetCategory write SetCategory;
    property CategoryCount: Integer read GetCategoryCount write SetCategoryCount;
    property GroupValues[ADataGroupIndex, AIndex: Integer]: Variant read GetGroupValue write SetGroupValue;
    property Values[ASeriesIndex, AIndex: Integer]: Variant read GetValue write SetValue;

    // visible values
    property VisibleCategories[AIndex: Integer]: Variant read GetVisibleCategory;
    property VisibleCategoryCount: Integer read GetVisibleCategoryCount;
    property VisibleValues[ASeriesIndex, AIndex: Integer]: Variant read GetVisibleValue;
    
    property VisibleGroupValueCount[AVisibleDataGroupIndex: Integer]: Integer read GetVisibleGroupValueCount;
    property VisibleGroupValues[AVisibleDataGroupIndex, AIndex: Integer]: Variant read GetVisibleGroupValue;
  end;

  { view info }

  // part

  TcxCustomGridChartPartViewInfo = class(TcxCustomGridViewCellViewInfo)
  private
    function GetGridView: TcxGridChartView;
    function GetGridViewInfo: TcxGridChartViewInfo;
  protected
    function GetAlignment: TcxGridChartPartAlignment; virtual; abstract;
    function GetHeight: Integer; override;
    function GetOrientation: TcxGridChartPartOrientation; virtual; abstract;
    function GetPosition: TcxGridChartPartPosition; virtual; abstract;
    function GetVisible: Boolean; override;
    function GetWidth: Integer; override;
  public
    property Alignment: TcxGridChartPartAlignment read GetAlignment;
    property GridView: TcxGridChartView read GetGridView;
    property GridViewInfo: TcxGridChartViewInfo read GetGridViewInfo;
    property Orientation: TcxGridChartPartOrientation read GetOrientation;
    property Position: TcxGridChartPartPosition read GetPosition;
  end;

  // custom title

  TcxCustomGridChartTitleViewInfo = class(TcxCustomGridChartPartViewInfo)
  private
    FTitle: TcxCustomGridChartTitle;
  protected
    function CalculateHeight: Integer; override;
    function CalculateWidth: Integer; override;
    function GetAlignment: TcxGridChartPartAlignment; override;
    function GetOrientation: TcxGridChartPartOrientation; override;
    function GetPainterClass: TcxCustomGridCellPainterClass; override;
    function GetPosition: TcxGridChartPartPosition; override;
    function GetText: string; override;
    function GetTextAreaBounds: TRect; override;
    function HasBackground: Boolean; override;
  public
    constructor Create(AGridViewInfo: TcxCustomGridViewInfo; ATitle: TcxCustomGridChartTitle); reintroduce; virtual;
    property Title: TcxCustomGridChartTitle read FTitle;
  end;

  // custom legend

  TcxGridChartLegendItemViewInfoClass = class of TcxGridChartLegendItemViewInfo;

  TcxGridChartLegendItemViewInfo = class(TcxCustomGridViewCellViewInfo)
  private
    FContainer: TcxGridChartLegendViewInfo;
    FIndex: Integer;
    function GetDiagram: TcxGridChartDiagram;
    function GetGridView: TcxGridChartView;
    function GetLegendKeyHeight: Integer;
    function GetLegendKeyWidth: Integer;
    function GetSeries: TcxGridChartSeries;
  protected
    function CalculateContentBounds: TRect; override;
    function CalculateHeight: Integer; override;
    function CalculateWidth: Integer; override;
    function CalculateLegendKeyHeight: Integer; virtual;
    function CalculateLegendKeySize: Integer; virtual;
    function CalculateLegendKeyWidth: Integer; virtual;
    function CustomDraw(ACanvas: TcxCanvas): Boolean; override;
    procedure DoCalculateParams; override;
    function GetDesignSelectionBounds: TRect; override;
    function GetHitTestClass: TcxCustomGridHitTestClass; override;
    function GetIsDesignSelected: Boolean; override;
    function GetLegendKeyBorders: TcxBorders; virtual;
    function GetLegendKeyBounds: TRect; virtual;
    function GetLegendKeyOffset: Integer; virtual;
    function GetPainterClass: TcxCustomGridCellPainterClass; override;
    function GetText: string; override;
    function GetTextAreaBounds: TRect; override;
    procedure GetViewParams(var AParams: TcxViewParams); override;
    function HasBackground: Boolean; override;
    function HasCustomDraw: Boolean; override;
    procedure InitHitTest(AHitTest: TcxCustomGridHitTest); override;

    property LegendKeyHeight: Integer read GetLegendKeyHeight;
    property LegendKeyOffset: Integer read GetLegendKeyOffset;
    property LegendKeyWidth: Integer read GetLegendKeyWidth;
  public
    LegendKeyParams: TcxViewParams;
    constructor Create(AContainer: TcxGridChartLegendViewInfo; AIndex: Integer); reintroduce; virtual;
    function GetAreaBoundsForPainting: TRect; override;
    function MouseDown(AHitTest: TcxCustomGridHitTest; AButton: TMouseButton;
      AShift: TShiftState): Boolean; override;
    property Container: TcxGridChartLegendViewInfo read FContainer;
    property Diagram: TcxGridChartDiagram read GetDiagram;
    property GridView: TcxGridChartView read GetGridView;
    property Index: Integer read FIndex;
    property LegendKeyBorders: TcxBorders read GetLegendKeyBorders;
    property LegendKeyBounds: TRect read GetLegendKeyBounds;
    property Series: TcxGridChartSeries read GetSeries;
  end;

  TcxGridChartLegendKind = (lkSeries, lkCategories);

  TcxGridChartLegendViewInfoClass = class of TcxGridChartLegendViewInfo;

  TcxGridChartLegendViewInfo = class(TcxCustomGridChartPartViewInfo)
  private
    FDiagram: TcxGridChartDiagram;
    FItemLegendKeyWidth: Integer;
    FItemLegendKeyHeight: Integer;
    FItemOffset: Integer;
    FItems: TList;
    function GetCount: Integer;
    function GetItem(Index: Integer): TcxGridChartLegendItemViewInfo;
    function GetItemLegendKeyWidth: Integer;
    function GetItemLegendKeyHeight: Integer;
    function GetItemOffset: Integer;
  protected
    function CalculateHeight: Integer; override;
    function CalculateWidth: Integer; override;
    function CalculateItemLegendKeyWidth: Integer; virtual;
    function CalculateItemLegendKeyHeight: Integer; virtual;
    function CalculateItemOffset: Integer; virtual;
    function CustomDraw(ACanvas: TcxCanvas): Boolean; override;
    function GetAlignment: TcxGridChartPartAlignment; override;
    function GetBorderColor(AIndex: TcxBorder): TColor; override;
    function GetBorders: TcxBorders; override;
    function GetBorderWidth(AIndex: TcxBorder): Integer; override;
    function GetHitTestClass: TcxCustomGridHitTestClass; override;
    function GetOrientation: TcxGridChartPartOrientation; override;
    function GetPainterClass: TcxCustomGridCellPainterClass; override;
    function GetPosition: TcxGridChartPartPosition; override;
    procedure GetViewParams(var AParams: TcxViewParams); override;
    function GetVisible: Boolean; override;
    function HasCustomDraw: Boolean; override;

    function AddItem: TcxGridChartLegendItemViewInfo;
    procedure CalculateItems; virtual;
    function GetItemCaption(AIndex: Integer): string; virtual;
    function GetItemClass: TcxGridChartLegendItemViewInfoClass; virtual;
    function GetItemCount: Integer; virtual;
    function GetItemObjectIndex(AIndex: Integer): Integer; virtual; abstract;
    function GetItemSeriesIndex(AIndex: Integer): Integer; virtual;
    function GetItemValueIndex(AIndex: Integer): Integer; virtual;
    function GetKind: TcxGridChartLegendKind; virtual; abstract;
    //function ItemLegendKeyBorderIsValueBorder: Boolean; virtual;

    property ItemLegendKeyWidth: Integer read GetItemLegendKeyWidth;
    property ItemLegendKeyHeight: Integer read GetItemLegendKeyHeight;
    property ItemOffset: Integer read GetItemOffset;
  public
    constructor Create(AGridViewInfo: TcxCustomGridViewInfo; ADiagram: TcxGridChartDiagram); reintroduce; virtual;
    destructor Destroy; override;
    procedure Calculate(ALeftBound, ATopBound: Integer; AWidth: Integer = -1;
      AHeight: Integer = -1); override;
    function GetHitTest(const P: TPoint): TcxCustomGridHitTest; override;
    procedure GetItemLegendKeyParams(AIndex: Integer; out AParams: TcxViewParams); virtual;
    property Diagram: TcxGridChartDiagram read FDiagram;
    property Count: Integer read GetCount;
    property Items[Index: Integer]: TcxGridChartLegendItemViewInfo read GetItem;
    property Kind: TcxGridChartLegendKind read GetKind;
  end;

  // custom diagram

  TcxGridChartDiagramValueCaptionViewInfoClass = class of TcxGridChartDiagramValueCaptionViewInfo;

  TcxGridChartDiagramValueCaptionViewInfo = class(TcxCustomGridViewCellViewInfo)
  private
    FValueViewInfo: TcxGridChartDiagramValueViewInfo;
  protected
    function GetAlignmentHorz: TAlignment; override;
    function GetAlignmentVert: TcxAlignmentVert; override;
    function CalculateHeight: Integer; override;
    function CalculateWidth: Integer; override;
    function GetText: string; override;
    function GetTextAreaBounds: TRect; override;
    function GetTextAttributes(AForPainting: Boolean): Integer; override;
    procedure GetViewParams(var AParams: TcxViewParams); override;
    function GetVisible: Boolean; override;
    function HasBackground: Boolean; override;
    function HasVisualCompensation: Boolean; virtual;
  public
    constructor Create(AValueViewInfo: TcxGridChartDiagramValueViewInfo); reintroduce; virtual;
    property ValueViewInfo: TcxGridChartDiagramValueViewInfo read FValueViewInfo;

⌨️ 快捷键说明

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