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

📄 cxvgrid.pas

📁 delphi的的三方控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  TcxvgResizeKind = (rkNone, rkRowSizing, rkDivider, rkBandSizing);

  TcxvgController = class(TcxCustomControlController, IUnknown, IcxDragSizing)
  private
    FAutoScrollObject: TcxControllerAutoScrollingObject;
    FCellIndex: Integer;
    FDragFromCustomizingForm: Boolean;
    FDragRow: TcxCustomRow;
    FForceShowEditor: Boolean;
    FFocusedRow: TcxCustomRow;
    FLockIncSearch: Boolean;
    FProcessMultiEditorRow: Boolean;
    FResizeKind: TcxvgResizeKind;
    FScrollDown: Boolean;
    FScroller: TcxvgScroller;
    FScrollTimer: TTimer;
    FSizingRow: TcxCustomRow;
    FSizingValue: Integer;
    FTrackingEnabled: Boolean;
    FWasScroll: Boolean;
    procedure CheckMoveToCustomizationForm;
    function GetHitTest: TcxvgHitTest;
    function GetVerticalGrid: TcxCustomVerticalGrid;
    function GetViewInfo: TcxvgCustomViewInfo;
    procedure SetFocusedRow(Value: TcxCustomRow);
    procedure SetResizeKind(Value: TcxvgResizeKind);
    procedure OnScrollTimer(Sender: TObject);
    procedure StartScrollTimer;
    procedure StopScrollTimer;
  protected
    FLockUpdate: Boolean;
    ResizeDirection: TcxDragSizingDirection;
    // IUnknown
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
    // IcxDragSizing
    function CanSizing(ADirection: TcxDragSizingDirection): Boolean; virtual;
    function GetSizingBoundsRect(ADirection: TcxDragSizingDirection): TRect; virtual;
    function GetSizingIncrement(ADirection: TcxDragSizingDirection): Integer; virtual;
    function IsDynamicUpdate: Boolean; virtual;
    procedure SetSizeDelta(ADirection: TcxDragSizingDirection; ADelta: Integer); virtual;
    // drag'n'drop
    procedure DragDrop(Source: TObject; X, Y: Integer); override;
    procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
      var Accept: Boolean); override;
    procedure EndDrag(Target: TObject; X, Y: Integer); override;
    procedure StartDrag(var DragObject: TDragObject); override;

    procedure BeforeMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure BehaviorChanged; override;
    function CanAppend(ACheckOptions: Boolean): Boolean; virtual;
    function CanChangeRecord: Boolean; virtual;
    function CanDelete(ACheckOptions: Boolean): Boolean; virtual;
    function CanInsert(ACheckOptions: Boolean): Boolean; virtual;
    procedure CheckPostData;
    procedure DoCancelMode; override;
    procedure DoMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure DoMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure DoNextPage(AForward: Boolean; Shift: TShiftState); override;
    procedure DoUpdateRowAndCell(ANewRow: TcxCustomRow; ANewCellIndex: Integer); virtual;
    procedure FocusedItemChanged(APrevFocusedItem: TcxCustomInplaceEditContainer); override;
    function GetCancelEditingOnExit: Boolean; override;
    function GetDragAndDropObjectClass: TcxDragAndDropObjectClass; override;
    function GetFocusedCellViewInfo(AEditContainer: TcxCustomInplaceEditContainer): TcxEditCellViewInfo; override;
    function GetImmediateEditor: Boolean; override;
    function GetNavigatorClass: TcxCustomCellNavigatorClass; override;
    function GetPostDataOnChangeItem: Boolean; virtual;
    function GetResizeDirection: TcxDragSizingDirection; override;
    procedure InternalSetRowAndCell(ARow: TcxCustomRow; ACellIndex: Integer);
    function IsImmediatePost: Boolean; override;
    function IsInternalDragging: Boolean;
    function IsKeyForController(AKey: Word; AShift: TShiftState): Boolean; override;
    procedure RefreshFocusedRow; virtual;
    procedure SetFocusedCellEdit(ACellEdit: TcxCellEdit);
    procedure SetFocusedRowAndCell(Value: TcxCustomRow; ACellIndex: Integer); virtual;
    procedure UpdatePaintStyle; virtual;
    procedure UpdateRecord(ARecordIndex: Integer); override;
    property DragRow: TcxCustomRow read FDragRow;
    property DragFromCustomizingForm: Boolean read FDragFromCustomizingForm;
    property ForceShowEditor: Boolean read FForceShowEditor;
    property ProcessMultiEditorRow: Boolean read FProcessMultiEditorRow;
    property ResizeKind: TcxvgResizeKind read FResizeKind write SetResizeKind;
  public
    // override
    constructor Create(AOwner: TcxEditingControl); override;
    destructor Destroy; override;
    // IUnknown
    function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;

    procedure Clear; override;
    function GetCursor(X, Y: Integer): TCursor; override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure MakeFocusedItemVisible; override;
    procedure MakeFocusedRecordVisible; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    // drag and drop
    function CanDrag(X, Y: Integer): Boolean; override;
    procedure EndDragAndDrop(Accepted: Boolean); override;
    function StartDragAndDrop(const P: TPoint): Boolean; override;
    // scrolling
    procedure InitScrollBarsParameters; override;
    procedure Scroll(AScrollBarKind: TScrollBarKind; AScrollCode: TScrollCode;
      var AScrollPos: Integer); override;

    procedure AppendRecord; virtual;
    procedure DeleteSelection; virtual;
    procedure InsertRecord; virtual;
    procedure MakeRowVisible(ARow: TcxCustomRow); virtual;
    function MakeRecordVisible(AIndex: Integer): Boolean; virtual;
    property CellIndex: Integer read FCellIndex;
    property FocusedRow: TcxCustomRow read FFocusedRow write SetFocusedRow;
    property HitTest: TcxvgHitTest read GetHitTest;
    property Scroller: TcxvgScroller read FScroller;
    property VerticalGrid: TcxCustomVerticalGrid read GetVerticalGrid;
    property ViewInfo: TcxvgCustomViewInfo read GetViewInfo;
  end;

  { TcxvgMultiRecordsController }

  TcxvgMultiRecordsController = class(TcxvgController)
  private
    function GetOptionsBehavior: TcxvgMultiRecordsOptionsBehavior;
    function GetOptionsData: TcxvgMultiRecordsOptionsData;
    function GetVerticalGrid: TcxVirtualVerticalGrid;
  protected
    function CanAppend(ACheckOptions: Boolean): Boolean; override;
    function CanChangeRecord: Boolean; override;
    function CanDelete(ACheckOptions: Boolean): Boolean; override;
    function CanInsert(ACheckOptions: Boolean): Boolean; override;
    procedure FocusedRecordChanged(APrevFocusedRowIndex, AFocusedRowIndex: Integer); override;
    function GetCancelEditingOnExit: Boolean; override;
    function GetFocusedRecordIndex: Integer; override;
    function GetPostDataOnChangeItem: Boolean; override;
    function IncSearchKeyDown(AKey: Word; AShift: TShiftState): Word; override;
    function IsImmediatePost: Boolean; override;
    procedure RefreshIncSearchItem; virtual;
    procedure SetFocusedRecordIndex(Value: Integer); override;
    property OptionsBehavior: TcxvgMultiRecordsOptionsBehavior read GetOptionsBehavior;
    property OptionsData: TcxvgMultiRecordsOptionsData read GetOptionsData;
    property VerticalGrid: TcxVirtualVerticalGrid read GetVerticalGrid;
  public
    procedure DeleteSelection; override;
  end;

  { TcxCustomVerticalGrid }

  TcxVerticalGridDrawHeaderEvent = procedure(Sender: TObject;
    ACanvas: TcxCanvas; APainter: TcxvgPainter;
    AHeaderViewInfo: TcxCustomRowHeaderInfo;
    var Done: Boolean) of object;

  TcxVerticalGridDrawValueEvent = procedure(Sender: TObject;
    ACanvas: TcxCanvas; APainter: TcxvgPainter;
    AValueInfo: TcxRowValueInfo;
    var Done: Boolean) of object;

  TcxVerticalGridDrawBackgroundEvent = procedure(Sender: TObject;
    ACanvas: TcxCanvas; const R: TRect; const AViewParams: TcxViewParams;
    var Done: Boolean) of object;

  TcxVerticalGridEditingEvent = procedure(Sender: TObject;
    ARowProperties: TcxCustomEditorRowProperties; var Allow: Boolean) of object;

  TcxVerticalGridChangedEvent = procedure(Sender: TObject;
    ARowProperties: TcxCustomEditorRowProperties) of object;

  TcxVerticalGridItemChangedEvent = procedure(Sender: TObject;
    AOldRow: TcxCustomRow; AOldCellIndex: Integer) of object;

  TcxCustomVerticalGrid = class(TcxExtEditingControl, IcxStoredObject,
    IcxStoredParent)
  private
    FCategoryFont: TFont;
    FCustomizing: TcxVerticalGridCustomizing;
    FImageChangeLink: TChangeLink;
    FImages: TImageList;
    FNewLoadMode: Boolean;
    FRootRow: TcxCustomRow;
    FRows: TcxVerticalGridRows;
    FSaveDragCursor: TCursor;
    FStoringName: string;
    FStylesEvents: TNotifyEvent;
    FOnCustomizationVisibleChanged: TNotifyEvent;
    FOnDrawBackground: TcxVerticalGridDrawBackgroundEvent;
    FOnDrawRowHeader: TcxVerticalGridDrawHeaderEvent;
    FOnDrawValue: TcxVerticalGridDrawValueEvent;
    FOnEdited: TcxVerticalGridChangedEvent;
    FOnEditing: TcxVerticalGridEditingEvent;
    FOnEditValueChanged: TcxVerticalGridChangedEvent;
    FOnItemChanged: TcxVerticalGridItemChangedEvent;
    FOnLayoutChanged: TNotifyEvent;
    FOnLeftVisibleBandIndexChanged: TNotifyEvent;
    FOnLeftVisibleRecordIndexChanged: TNotifyEvent;
    FOnTopRowIndexChanged: TNotifyEvent;
    procedure CategoryFontChanged(Sender: TObject);
    function GetController: TcxvgController;
    function GetDragHeaderInfo: TcxCustomRowHeaderInfo;
    function GetFocusedRow: TcxCustomRow;
    function GetHitTest: TcxvgHitTest;
    function GetInplaceEditor: TcxCustomEdit;
    function GetIsEditing: Boolean;
    function GetLeftVisibleBand: Integer;
    function GetLeftVisibleRecord: Integer;
    function GetOptionsBehavior: TcxvgOptionsBehavior;
    function GetOptionsView: TcxvgOptionsView;
    function GetPainter: TcxvgPainter;
    function GetRecordCount: Integer;
    function GetStyles: TcxVerticalGridStyles;
    function GetTopVisibleRowIndex: Integer;
    function GetViewInfo: TcxvgCustomViewInfo;
    procedure ImageListChange(Sender: TObject);
    procedure SetFocusedRow(Value: TcxCustomRow);
    procedure SetImages(Value: TImageList);
    procedure SetLeftVisibleBand(Value: Integer);
    procedure SetLeftVisibleRecord(Value: Integer);
    procedure SetOptionsBehavior(Value: TcxvgOptionsBehavior);
    procedure SetOptionsView(Value: TcxvgOptionsView);
    procedure SetStyles(Value: TcxVerticalGridStyles);
    procedure SetTopVisibleRowIndex(Value: Integer);
    procedure CMDrag(var Message: TCMDrag); message CM_DRAG;
  protected
    // IcxStoredObject
    function GetObjectName: string; virtual;
    function GetProperties(AProperties: TStrings): Boolean; virtual;
    procedure GetPropertyValue(const AName: string; var AValue: Variant); virtual;
    procedure SetPropertyValue(const AName: string; const AValue: Variant); virtual;
    // IcxStoredParent
    function CreateChild(const AObjectName, AClassName: string): TObject; virtual;
    procedure DeleteChild(const AObjectName: string; AObject: TObject); virtual;
    procedure IcxStoredParent.GetChildren = GetStoredChildren;
    procedure GetStoredChildren(AChildren: TStringList); virtual;
    // vcl methods
    procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
    procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
    procedure Loaded; override;
    procedure SetName(const Value: TComponentName); override;
    // cxControls
    procedure BoundsChanged; override;
    procedure FontChanged; override;
    procedure InitControl; override;
    procedure LookAndFeelChanged(Sender: TcxLookAndFeel;
      AChangedValues: TcxLookAndFeelValues); override;
    // cxControls - drag'n'drop
    function GetDragObjectClass: TDragControlObjectClass; override;
    // cxExtEditingControl
    procedure CreateSubClasses; override;
    procedure DataChanged; override;
    procedure DestroySubClasses; override;
    procedure DoEdited(AItem: TcxCustomInplaceEditContainer); override;
    function DoEditing(AItem: TcxCustomInplaceEditContainer): Boolean; override;
    procedure DoEditValueChanged(AItem: TcxCustomInplaceEditContainer); override;
    procedure DoInplaceEditContainerItemRemoved(AItem: TcxCustomInplaceEditContainer); override;
    procedure DoLayoutChanged; override;
    function DragDropImageDisplayRect: TRect; override;
    procedure DrawDragDropImage(ADragBitmap: TBitmap; ACanvas: TcxCanvas); override;
    function GetControllerClass: TcxCustomControlControllerClass; override;
    function GetControlStylesClass: TcxCustomControlStylesClass; override;
    function GetDragImageHelperClass: TcxDragImageHelperClass; override;
    function GetEditCellDataBindingClass: TcxItemDataBindingClass; virtual;
    function GetHitTestControllerClass: TcxHitTestControllerClass; override;
    function GetOptionsBehaviorClass: TcxControlOptionsBehaviorClass; override;
    function GetOptionsViewClass: TcxControlOptionsViewClass; override;
    function GetPainterClass: TcxCustomControlPainterClass; override;
    function HasDragDropImages: Boolean; override;
    procedure RecreateViewInfo; override;
    // virtuals
    procedure AfterLoadedRows;
    procedure BeforeLoadedRows;
    function CanBandSizing: Boolean; virtual;
    procedure CheckRowClass(ARowClass: TcxCustomRowClass); virtual;
    procedure CheckGridModeBufferCount;
    procedure DoCustomizationVisibleChanged; virtual;
    function DoDrawBackgroundPart(const R: TRect; const AViewParams: TcxViewParams): Boolean; virtual;
    function DoDrawRowHeader(AHeaderViewInfo: TcxCustomRowHeaderInfo): Boolean; virtual;
    function DoDrawValue(AValueInfo: TcxRowValueInfo): Boolean; virtual;
    procedure DoItemChanged(AOldRow: TcxCustomRow; AOldCellIndex: Integer); virtual;
    procedure DoLeftVisibleBandIndexChanged; virtual;
    procedure DoLeftVisibleRecordIndexChanged; virtual;
    procedure DoTopRowIndexChanged; virtual;
    function GetCalcHelperClass: TcxvgCustomPaintStyleCalcHelperClass; virtual;
    function GetCellAutoHeight: Boolean; virtual;
    function GetCustomizingClass: TcxVerticalGridCustomizingClass; virtual;
    procedure GetDefaultViewParams(Index: Integer; AData: TObject; out AParams: TcxViewParams); virtual;
    function GetEditorRowClass: TcxCustomRowClass; virtual;
    function GetMultiEditorRowClass: TcxCustomRowClass; virtual;
    function GetScrollStrategyClass: TcxvgCustomScrollStrategyClass; virtual; abstract;
    procedure InitDataCon

⌨️ 快捷键说明

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