cxgridcustomview.pas

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

PAS
1,463
字号
    procedure EndDragAndDrop(Accepted: Boolean); virtual;
    function StartDragAndDrop(const P: TPoint): Boolean; virtual;

    // delphi drag and drop
    procedure BeforeStartDrag; virtual;
    function CanDrag(X, Y: Integer): Boolean; virtual;
    procedure DragDrop(Source: TObject; X, Y: Integer); virtual;
    procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
      var Accept: Boolean); virtual;
    procedure DrawDragImage(ACanvas: TcxCanvas; R: TRect); virtual;
    procedure EndDrag(Target: TObject; X, Y: Integer); virtual;
    function GetDragImagesSize: TPoint; virtual;
    function HasDragImages: Boolean; virtual;
    procedure StartDrag(var DragObject: TDragObject); virtual;
    property DragImages: TcxDragImageList read GetDragImages;

    // hints
    function CanShowHint: Boolean; virtual;
    procedure HideHint;
    function GetHintWindowClass: THintWindowClass; virtual;
    procedure ShowHint(const AHintAreaBounds, ATextRect: TRect; const AText: string;
      AIsHintMultiLine: Boolean; AFont: TFont; AHintCellViewInfo: TcxCustomGridViewCellViewInfo);
    procedure StartHintCheckerTimer;
    procedure StopHintCheckerTimer;
    property HintCellViewInfo: TcxCustomGridViewCellViewInfo read FHintCellViewInfo;
    property HintWindow: THintWindow read FHintWindow;

    procedure DoKeyDown(var Key: Word; Shift: TShiftState); virtual;
    procedure KeyDown(var Key: Word; Shift: TShiftState); virtual;
    procedure KeyPress(var Key: Char); virtual;
    procedure KeyUp(var Key: Word; Shift: TShiftState); virtual;

    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); virtual;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual;

    function ProcessDetailDialogChar(ADetail: TcxCustomGridView; ACharCode: Word): Boolean; virtual;
    function ProcessDialogChar(ACharCode: Word): Boolean; virtual;

    procedure WndProc(var Message: TMessage); virtual;

    procedure RefreshCustomizationForm;

    {procedure BeginCellMouseTracking(AViewInfo: TcxCustomGridCellViewInfo);
    procedure EndCellMouseTracking(AViewInfo: TcxCustomGridCellViewInfo);}

    property Customization: Boolean read FCustomization write SetCustomization;
    property CustomizationForm: TcxCustomGridCustomizationForm read FCustomizationForm;
    property CustomizationFormBounds: TRect read FCustomizationFormBounds
      write FCustomizationFormBounds;
    property DesignController: TcxGridViewDesignController read GetDesignController;
    property DragAndDropObjectClass: TcxDragAndDropObjectClass read GetDragAndDropObjectClass
      write SetDragAndDropObjectClass;
    property IsDblClick: Boolean read FIsDblClick;
    property MouseCaptureViewInfo: TcxCustomGridCellViewInfo read GetMouseCaptureViewInfo
      write SetMouseCaptureViewInfo;
  end;

  { datacontroller }

  // sorting by summary

  TcxDataGroupNode = class
  private
    FChilds: TList;
    FDataGroupInfo: TcxDataGroupInfo;
    FParent: TcxDataGroupNode;
    function GetChild(Index: Integer): TcxDataGroupNode;
    function GetChildCount: Integer;
  public
    constructor Create(AParent: TcxDataGroupNode; ADataGroupInfo: TcxDataGroupInfo);
    destructor Destroy; override;
    function AddChild(ADataGroupInfo: TcxDataGroupInfo): TcxDataGroupNode;

    property ChildCount: Integer read GetChildCount;
    property Childs[Index: Integer]: TcxDataGroupNode read GetChild; default;
    property DataGroupInfo: TcxDataGroupInfo read FDataGroupInfo;
    property Parent: TcxDataGroupNode read FParent;
  end;

  TcxSortingBySummaryInfo = class
    SortOrder: TcxDataSortOrder;
    SummaryItemIndex: Integer;
  end;

  TcxGridSortingBySummaryEngine = class(TcxSortingBySummaryEngine)
  private
    FInfos: TList;
    FRootNode: TcxDataGroupNode;
    function GetDataGroups: TcxDataGroups;
    function GetInfo(Index: Integer): TcxSortingBySummaryInfo;
    function GetInfoCount: Integer;
  protected
    procedure AddInfo(AInfo: TcxSortingBySummaryInfo);
    procedure BuildNodes(AParentNode: TcxDataGroupNode; ALevel: Integer; var ACurIndex: Integer);
    procedure ClearInfos;
    function CompareGroupsBySummary(AInfo1, AInfo2: Pointer): Integer;
    procedure RebuildDataGroupRecursive(AParentNode: TcxDataGroupNode; var ABeginRecordListIndex: Integer);
    procedure RebuildDataGroups;
    procedure SortNodeRecursive(ANode: TcxDataGroupNode; ALevel: Integer);
    procedure SortNodes;

    property DataGroups: TcxDataGroups read GetDataGroups;
    property InfoCount: Integer read GetInfoCount;
    property Infos[Index: Integer]: TcxSortingBySummaryInfo read GetInfo;
  public
    constructor Create(ADataControllerInfo: TcxCustomDataControllerInfo); override;
    destructor Destroy; override;
    procedure Sort; override;
  end;

  // interface to data controller

  IcxCustomGridDataController = interface
    ['{B9ABDC6B-1A4A-4F11-A629-09B6FB9FB4BA}']
    procedure AssignData(ADataController: TcxCustomDataController);
    procedure CreateAllItems(AMissingItemsOnly: Boolean);
    procedure DeleteAllItems;
    procedure GetFakeComponentLinks(AList: TList);
    function GetGridView: TcxCustomGridView;
    function HasAllItems: Boolean;
    function IsDataChangeable: Boolean;
    function IsDataLinked: Boolean;
    function SupportsCreateAllItems: Boolean;
    property GridView: TcxCustomGridView read GetGridView;
  end;

  { painters }

  TcxCustomGridCellPainterClass = class of TcxCustomGridCellPainter;

  TcxCustomGridCellPainter = class
  private
    FCanvas: TcxCanvas;
    FViewInfo: TcxCustomGridCellViewInfo;
    function GetIsMainCanvasInUseValue: Boolean;
  protected
    procedure AfterPaint; virtual;
    procedure BeforePaint; virtual;
    function CanDrawDesignSelection: Boolean; virtual;
    procedure DoExcludeFromClipRect; virtual;
    procedure DrawBackground; overload; virtual;
    procedure DrawBackground(const R: TRect); overload; virtual;
    function DrawBackgroundHandler(ACanvas: TcxCanvas; const ABounds: TRect): Boolean; virtual;
    procedure DrawBorder(ABorder: TcxBorder); virtual;
    procedure DrawBorders; virtual;
    procedure DrawContent; virtual;
    class procedure DrawDesignSelection(ACanvas: TcxCanvas;
      AViewInfo: TcxCustomGridCellViewInfo); virtual;
    procedure DrawText; virtual;
    function ExcludeFromClipRect: Boolean; virtual;
    class function GetIsMainCanvasInUse(ACanvas: TcxCanvas; AViewInfo: TcxCustomGridCellViewInfo): Boolean;
    function NeedsPainting: Boolean; virtual;
    procedure Paint; virtual;
    procedure PrepareCanvasForDrawText; virtual;
    procedure UnprepareCanvasForDrawText; virtual;
    property Canvas: TcxCanvas read FCanvas;
    property IsMainCanvasInUse: Boolean read GetIsMainCanvasInUseValue;
    property ViewInfo: TcxCustomGridCellViewInfo read FViewInfo;
  public
    constructor Create(ACanvas: TcxCanvas; AViewInfo: TcxCustomGridCellViewInfo); virtual;
    class procedure DoDrawDesignSelection(ACanvas: TcxCanvas;
      AViewInfo: TcxCustomGridCellViewInfo); virtual;
    procedure MainPaint; virtual;
  end;

  TcxGridDesignSelectorPainter = class(TcxCustomGridCellPainter)
  private
    function GetViewInfo: TcxGridDesignSelectorViewInfo;
  protected
    procedure DoExcludeFromClipRect; override;
    procedure DrawSign(AColor: TColor); virtual;
    function ExcludeFromClipRect: Boolean; override;
    procedure Paint; override;
    property ViewInfo: TcxGridDesignSelectorViewInfo read GetViewInfo;
  end;

  TcxCustomGridPainterClass = class of TcxCustomGridPainter;

  TcxCustomGridPainter = class(TcxGridViewHandler)
  private
    FBackgroundRegion: TcxRegion;
    FBeforePaintClipRegion: TcxRegion;
    FCanvas: TcxCanvas;
    FViewInfo: TcxCustomGridViewInfo;
    function GetCanvas: TcxCanvas;
    function GetViewInfo: TcxCustomGridViewInfo;
  protected
    procedure DrawBackground; virtual;
    procedure PaintAfter; virtual;
    procedure PaintBefore; virtual;
    procedure PaintContent; virtual;
    property Canvas: TcxCanvas read GetCanvas write FCanvas;
    property ViewInfo: TcxCustomGridViewInfo read GetViewInfo write FViewInfo;
  public
    procedure DrawFocusRect(const R: TRect; AHideFocusRect: Boolean); virtual;
    procedure ExcludeFromBackground(const R: TRect);
    procedure Paint(ACanvas: TcxCanvas = nil; AViewInfo: TcxCustomGridViewInfo = nil);
    procedure Invalidate; overload;
    procedure Invalidate(const R: TRect); overload;
    procedure Invalidate(ARegion: TcxRegion); overload;
  end;

  { viewdata }

  TcxCustomGridViewDataClass = class of TcxCustomGridViewData;

  TcxCustomGridViewData = class(TcxGridViewHandler)
  public
    function GetSortingBySummaryEngineClass: TcxSortingBySummaryEngineClass; virtual;
    function IsEmpty: Boolean; virtual;
    function MakeDetailVisible(ADetailLevel: TComponent{TcxGridLevel}): TcxCustomGridView; virtual;
    property DataController;
  end;

  { viewinfos }

  TcxGridSiteClass = class of TcxGridSite;

  TcxGridSite = class(TcxControl)
  private
    FBoundsChangedTimer: TcxTimer;
    FIgnoreUpdateLock: Boolean;
    FSize: TPoint;
    FViewInfo: TcxCustomGridViewInfo;
    function GetContainer: TcxControl;
    function GetController: TcxCustomGridController;
    function GetGridView: TcxCustomGridView;
    function GetPainter: TcxCustomGridPainter;
    procedure SendKeyDownNotification(var Message: TWMKeyDown);
    procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
    procedure CNSysKeyDown(var Message: TWMKeyDown); message CN_SYSKEYDOWN;
    procedure BoundsChangedTimerHandler(Sender: TObject);
  protected
    function AllowAutoDragAndDropAtDesignTime(X, Y: Integer;
      Shift: TShiftState): Boolean; override;
    function AllowDragAndDropWithoutFocus: Boolean; override;
    procedure BeforeMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure BoundsChanged; override;
    function CanDrag(X, Y: Integer): Boolean; override;
    function CanFocusOnClick(X, Y: Integer): Boolean; override;
    procedure DoCancelMode; override;
    procedure DoContextPopup(MousePos: TPoint; var Handled: Boolean); override;
    procedure DoEnter; override;
    procedure DoExit; override;
    procedure FocusChanged; override;
    function FocusWhenChildIsClicked(AChild: TControl): Boolean; override;
    function GetClientBounds: TRect; override;
    function GetCursor(X, Y: Integer): TCursor; override;
    function GetDesignHitTest(X, Y: Integer; Shift: TShiftState): Boolean; override;
    function GetIsDesigning: Boolean; override;
    function GetIsFocused: Boolean; override;
    function GetMouseWheelScrollingKind: TcxMouseWheelScrollingKind; override;
    function IsPixelScrollBar(AKind: TScrollBarKind): Boolean; override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure KeyPress(var Key: Char); override;
    procedure KeyUp(var Key: Word; Shift: TShiftState); override;
    function MayFocus: Boolean; override;
    procedure MouseLeave(AControl: TControl); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure Paint; override;
    procedure RequestAlign; override;
    procedure SetParent(AParent: TWinControl); override;
    procedure WndProc(var Message: TMessage); override;

    procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
    procedure DoStartDrag(var DragObject: TDragObject); override;
    procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override;
    procedure DrawDragImage(ACanvas: TcxCanvas; const R: TRect); override;
    function GetDragImagesSize: TPoint; override;
    function HasDragImages: Boolean; override;

    function GetHScrollBarBounds: TRect; override;
    procedure InitScrollBarsParameters; override;
    procedure Scroll(AScrollBarKind: TScrollBarKind; AScrollCode: TScrollCode;
      var AScrollPos: Integer); override;
    procedure UpdateScrollBars; override;

    procedure DragAndDrop(const P: TPoint; var Accepted: Boolean); override;
    procedure EndDragAndDrop(Accepted: Boolean); override;
    function StartDragAndDrop(const P: TPoint): Boolean; override;

    procedure CancelPostBoundsChanged;
    procedure InitTabStop(AParent: TWinControl);
    procedure PostBoundsChanged;
    procedure UpdateSize;

    property Controller: TcxCustomGridController read GetController;
    property IgnoreUpdateLock: Boolean read FIgnoreUpdateLock write FIgnoreUpdateLock;
    property Painter: TcxCustomGridPainter read GetPainter;
  public
    constructor Create(AViewInfo: TcxCustomGridViewInfo); reintroduce; virtual;

⌨️ 快捷键说明

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