cxgridcustomview.pas

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

PAS
1,463
字号
    procedure CalculateBorderStyle;
    procedure CalculateItemHeight;

    property Container: TcxCustomGridItemsListBox read GetContainer;
    property DragAndDropItem: TObject read GetDragAndDropItem;
    property DragAndDropItemIndex: Integer read FDragAndDropItemIndex;
    property GridView: TcxCustomGridView read GetGridView;
    property LookAndFeelPainter: TcxCustomLookAndFeelPainterClass read GetLookAndFeelPainter;
  public
    constructor Create(AOwner: TComponent); override;
  end;

  TcxCustomGridItemsListBoxClass = class of TcxCustomGridItemsListBox;

  TcxCustomGridItemsListBox = class(TcxListBox)
  private
    function GetDragAndDropItem: TObject;
    function GetGridView: TcxCustomGridView;
    function GetInnerListBox: TcxCustomGridItemsInnerListBox;
  protected
    function CalculateItemHeight: Integer; virtual; abstract;
    function GetInnerListBoxClass: TcxInnerListBoxClass; override;
    function GetDragAndDropParams: TcxCustomGridHitTest; virtual; abstract;
    property DragAndDropItem: TObject read GetDragAndDropItem;
    property GridView: TcxCustomGridView read GetGridView;
  public
    constructor Create(AOwner: TComponent); override;
    function IndexOfItem(AItem: TObject): Integer;
    procedure PaintDragAndDropItem(ACanvas: TcxCanvas; const R: TRect; AItem: TObject);
    procedure PaintItem(ACanvas: TcxCanvas; R: TRect; AIndex: Integer; AFocused: Boolean); virtual; abstract;
    procedure RefreshItems; virtual;
    property InnerListBox: TcxCustomGridItemsInnerListBox read GetInnerListBox;
  end;

  TcxCustomGridCustomizationFormClass = class of TcxCustomGridCustomizationForm;

  TcxCustomGridCustomizationForm = class(TForm)
  private
    FController: TcxCustomGridController;
    FHookTimer: TcxTimer;
    FOffset: Integer;
    FPageControl: TcxPageControl;
    function GetGridView: TcxCustomGridView;
    function GetViewInfo: TcxCustomGridViewInfo;
    procedure HookTimerHandler(Sender: TObject);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure DoClose(var Action: TCloseAction); override;
    procedure DoShow; override;

    procedure CalculateConsts; virtual;
    procedure CreateControls; virtual;
    function CreatePage(const ACaption: string; AVisible: Boolean): TcxTabSheet;
    procedure GridViewChanged; virtual;

    function GetContentBounds: TRect; virtual;
    function GetPageControlBounds: TRect; virtual;
    procedure InitPageControl; virtual;

    property ContentBounds: TRect read GetContentBounds;
    property GridView: TcxCustomGridView read GetGridView;
    property Offset: Integer read FOffset write FOffset;
    property PageControl: TcxPageControl read FPageControl;
    property ViewInfo: TcxCustomGridViewInfo read GetViewInfo;
  public
    constructor Create(AController: TcxCustomGridController); reintroduce; virtual;
    destructor Destroy; override;
    property Controller: TcxCustomGridController read FController;
    procedure ActivatePage(APage: TcxTabSheet);
    procedure RefreshData; virtual;
  end;

  // popup

  (*$HPPEMIT 'namespace Cxgridcustomview'}*)
  (*$HPPEMIT '{'}*)
  (*$HPPEMIT '__interface IcxCustomGridPopupOwner;'}*)
  (*$HPPEMIT '}'*)

  IcxCustomGridPopupOwner = interface
    ['{ACF62D23-6871-4735-A4CE-3B0888DB8FC3}']
    function ClosePopupWhenNilOwner: Boolean;
    function GetOwnerBounds: TRect;
    procedure PopupClosed;
  end;

  TcxCustomGridPopup = class(TcxCustomPopupWindow)
  private
    FGridView: TcxCustomGridView;
    FOwner: IcxCustomGridPopupOwner;
    procedure SetOwner(Value: IcxCustomGridPopupOwner);
  protected
    function CalculateOwnerBounds: TRect; virtual;
    function GetClientMinWidth: Integer; virtual;
    procedure InitPopup; override;
    procedure Paint; override;
    procedure VisibleChanged; override;
  public
    constructor Create(AGridView: TcxCustomGridView); reintroduce; virtual;
    procedure CloseUp; override;
    procedure Popup; reintroduce; virtual;
    property BorderWidths;
    property GridView: TcxCustomGridView read FGridView;
    property ClientMinWidth: Integer read GetClientMinWidth;
    property Owner: IcxCustomGridPopupOwner read FOwner write SetOwner;
  end;

  TcxGridIndexes = array of Integer;

  TcxGridPopupListBoxActionEvent = procedure(Sender: TcxGridPopupListBox;
    AItemIndex: Integer) of object;

  TcxGridPopupListBox = class(TcxListBox)
  private
    FCheckedIndexes: TList;
    FItemTextOffsetLeft: Integer;
    FItemTextOffsetRight: Integer;
    FItemTextOffsetVert: Integer;
    FMinWidth: Integer;
    FPopup: TcxCustomGridPopup;
    FPressedItemIndex: Integer;
    FShowChecks: Boolean;
    FVisibleItemCount: Integer;
    FVisibleWidth: Integer;
    FOnAction: TcxGridPopupListBoxActionEvent;
    function GetChecked(Index: Integer): Boolean;
    function GetCheckedIndexes: TcxGridIndexes;
    function GetGridView: TcxCustomGridView;
    procedure SetChecked(Index: Integer; Value: Boolean);
    procedure SetCheckedIndexes(const Value: TcxGridIndexes);
    procedure SetPressedItemIndex(Value: Integer);
    procedure SetShowChecks(Value: Boolean);
  protected
    function DrawItem(ACanvas: TcxCanvas; AIndex: Integer; const ARect: TRect;
      AState: TOwnerDrawState): Boolean; override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseLeave(AControl: TControl); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;

    function CalculateItemHeight: Integer; virtual;
    procedure DoAction(AItemIndex: Integer); virtual;
    procedure DrawItemCheck(ACanvas: TcxCanvas; AIndex: Integer;
      const ACheckAreaRect: TRect; AState: TOwnerDrawState); virtual;
    procedure DrawItemContent(ACanvas: TcxCanvas; AIndex: Integer; ARect: TRect;
      AState: TOwnerDrawState); virtual;
    function GetVisibleItemCount(AItems: TStrings): Integer; virtual;
    procedure Init; virtual;
    procedure InvalidateItem(AIndex: Integer);

    function CanHaveCheck(AItemIndex: Integer): Boolean; virtual;
    procedure ChangeChecked(AItemIndex: Integer); virtual;
    function GetCheckAreaHeight: Integer;
    function GetCheckAreaWidth: Integer;
    function HasCheck(AItemIndex: Integer): Boolean; virtual;
    function IsCheck(AItemIndex: Integer): Boolean;
    property Checked[Index: Integer]: Boolean read GetChecked write SetChecked;
    property CheckedIndexes: TcxGridIndexes read GetCheckedIndexes write SetCheckedIndexes;
    property PressedItemIndex: Integer read FPressedItemIndex write SetPressedItemIndex;
    property ShowChecks: Boolean read FShowChecks write SetShowChecks;
  public
    constructor Create(APopup: TcxCustomGridPopup); reintroduce; virtual;
    destructor Destroy; override;
    procedure AdjustBounds(AItems: TStrings = nil); virtual;

    property GridView: TcxCustomGridView read GetGridView;
    property ItemTextOffsetLeft: Integer read FItemTextOffsetLeft write FItemTextOffsetLeft;
    property ItemTextOffsetRight: Integer read FItemTextOffsetRight write FItemTextOffsetRight;
    property ItemTextOffsetVert: Integer read FItemTextOffsetVert write FItemTextOffsetVert;
    property MinWidth: Integer read FMinWidth write FMinWidth;
    property Popup: TcxCustomGridPopup read FPopup;
    property VisibleItemCount: Integer read FVisibleItemCount write FVisibleItemCount;
    property VisibleWidth: Integer read FVisibleWidth write FVisibleWidth;
    property OnAction: TcxGridPopupListBoxActionEvent read FOnAction write FOnAction;
  end;

  // controllers

  TcxCustomGridDesignController = class
  protected
    function GetControl: TcxControl; virtual; abstract;
    function GetDesignObject(AObject: TPersistent): TPersistent; virtual;
  public
    function IsObjectSelected(AObject: TPersistent): Boolean;
    procedure SelectObject(AObject: TPersistent; AClearSelection: Boolean);
    procedure SelectObjects(AObjects: TList);
    procedure UnselectObject(AObject: TPersistent);
    property Control: TcxControl read GetControl;  // TcxCustomGrid
  end;

  TcxGridViewDesignControllerClass = class of TcxGridViewDesignController;

  TcxGridViewDesignController = class(TcxCustomGridDesignController)
  private
    FController: TcxCustomGridController;
  protected
    function GetControl: TcxControl; override;
    function GetDesignObject(AObject: TPersistent): TPersistent; override;
  public
    constructor Create(AController: TcxCustomGridController); virtual;
    property Controller: TcxCustomGridController read FController;
  end;

  TcxCustomGridControllerClass = class of TcxCustomGridController;

  TcxCustomGridController = class(TcxGridViewHandler, IcxMouseTrackingCaller,
    IcxMouseTrackingCaller2)
  private
    FCustomization: Boolean;
    FCustomizationForm: TcxCustomGridCustomizationForm;
    FCustomizationFormBounds: TRect;
    FDesignController: TcxGridViewDesignController;
    FHintAreaBounds: TRect;
    FHintCellViewInfo: TcxCustomGridViewCellViewInfo;
    FHintCheckerTimer: TcxTimer;
    FHintTextRect: TRect;
    FHintWindow: THintWindow;
    FIsCheckingCoordinates: Boolean;
    FIsDblClick: Boolean;
    FIsFocusing: Boolean;
    function GetDesignController: TcxGridViewDesignController;
    function GetDragAndDropObject: TcxCustomGridDragAndDropObject;
    function GetDragAndDropObjectClass: TcxDragAndDropObjectClass;
    function GetDragImages: TcxDragImageList;
    function GetIsDragging: Boolean;
    function GetMouseCaptureViewInfo: TcxCustomGridCellViewInfo;
    procedure SetCustomization(Value: Boolean);
    procedure SetDragAndDropObjectClass(Value: TcxDragAndDropObjectClass);
    procedure SetMouseCaptureViewInfo(Value: TcxCustomGridCellViewInfo);
    procedure HintCheckerTimerHandler(Sender: TObject);
  protected
    { IcxMouseTrackingCaller2 }
    procedure MouseLeave; virtual;
    function PtInCaller(const P: TPoint): Boolean; virtual;

    procedure AfterPaint; virtual;
    procedure BeforeKillFocus; virtual;
    procedure BeforePaint; virtual;
    function CanFocusOnClick(X, Y: Integer): Boolean; virtual;
    function CanHandleHitTest(AHitTest: TcxCustomGridHitTest): Boolean; virtual;
    procedure CheckCoordinates; virtual;
    procedure DetailFocused(ADetail: TcxCustomGridView); virtual;
    procedure DoEnter; virtual;
    procedure DoExit; virtual;
    procedure DoSetFocus(ANotifyMaster: Boolean); virtual;
    function GetDesignControllerClass: TcxGridViewDesignControllerClass; virtual;
    function GetDesignHitTest(AHitTest: TcxCustomGridHitTest): Boolean; virtual;
    function GetMouseWheelScrollingKind: TcxMouseWheelScrollingKind; virtual;
    function GetPatternObject(AObject: TPersistent): TPersistent; virtual;
    procedure GridViewChanged; virtual;
    function IsPixelScrollBar(AKind: TScrollBarKind): Boolean; virtual;
    function MayFocus: Boolean; virtual;
    procedure RemoveFocus; virtual;
    procedure SetFocus(ANotifyMaster: Boolean); virtual;
    procedure VisibilityChanged(AVisible: Boolean); virtual;

    // customization
    procedure CheckCustomizationFormBounds(var R: TRect); virtual;
    procedure CustomizationChanged; virtual;
    function GetCustomizationFormBounds: TRect;
    function GetCustomizationFormClass: TcxCustomGridCustomizationFormClass; virtual;
    function GetCustomizationFormDefaultWidth: Integer; virtual;
    function GetCustomizationFormDefaultHeight: Integer; virtual;
    procedure HideCustomizationForm;
    procedure ShowCustomizationForm;

    property DragAndDropObject: TcxCustomGridDragAndDropObject read GetDragAndDropObject;
    property IsCheckingCoordinates: Boolean read FIsCheckingCoordinates;
    property IsDragging: Boolean read GetIsDragging;
    property IsFocusing: Boolean read FIsFocusing;
  public
    destructor Destroy; override;
    procedure ControlFocusChanged; virtual;
    procedure DesignerModified;
    procedure DoCancelMode; virtual;
    procedure DoCheckCoordinates;
    procedure DoControlFocusChanged;
    function GetCursor(X, Y: Integer): TCursor; virtual;
    function HasFocusedControls: Boolean; virtual;
    //function CanDrag(X, Y: Integer): Boolean; dynamic;
    //function GetDragObjectClass: TDragControlObjectClass; dynamic;

    procedure InitScrollBarsParameters; virtual;
    function IsDataFullyVisible(AIsCallFromMaster: Boolean = False): Boolean; virtual;
    procedure Scroll(AScrollBarKind: TScrollBarKind; AScrollCode: TScrollCode;
      var AScrollPos: Integer); virtual;
    procedure SetScrollBarInfo(AScrollBarKind: TScrollBarKind;
      AMin, AMax, AStep, APage, APos: Integer; AAllowShow, AAllowHide: Boolean);
    procedure UpdateScrollBars(AIgnoreUpdateLock: Boolean = False);

    procedure BeginDragAndDrop; virtual;
    procedure DragAndDrop(const P: TPoint; var Accepted: Boolean); virtual;

⌨️ 快捷键说明

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