cxgridcustomtableview.pas

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

PAS
1,405
字号
    procedure SetDestItemContainerKind(Value: TcxGridItemContainerKind);
    procedure SetDestZone(Value: TcxGridItemContainerZone);
  protected
    procedure CalculateDestParams(AHitTest: TcxCustomGridHitTest;
      out AContainerKind: TcxGridItemContainerKind; out AZone: TcxGridItemContainerZone); virtual;
    procedure CheckDestItemContainerKind(var AValue: TcxGridItemContainerKind); virtual;
    function GetCustomizationFormListBox: TcxCustomGridItemsListBox; override;
    function IsSourceCustomizationForm: Boolean; override;

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

    property DestItemContainerKind: TcxGridItemContainerKind read FDestItemContainerKind
      write SetDestItemContainerKind;
    property DestZone: TcxGridItemContainerZone read FDestZone write SetDestZone;
    property SourceItemContainerKind: TcxGridItemContainerKind read FSourceItemContainerKind
      write FSourceItemContainerKind;
  public
    constructor Create(AControl: TcxControl); override;
    destructor Destroy; override;
  end;

  // customization form

  TcxCustomGridTableItemsListBoxClass = class of TcxCustomGridTableItemsListBox;

  TcxCustomGridTableItemsListBox = class(TcxCustomGridItemsListBox)
  private
    function GetGridView: TcxCustomGridTableView;
  protected
    procedure RefreshItemsAsTableItems;
    property GridView: TcxCustomGridTableView read GetGridView;
  end;

  TcxCustomGridTableCustomizationForm = class(TcxCustomGridCustomizationForm)
  private
    FItemsListBox: TcxCustomGridTableItemsListBox;
    FItemsPage: TcxTabSheet;
  protected
    procedure CreateControls; override;
    function GetItemsListBoxClass: TcxCustomGridTableItemsListBoxClass; virtual;
    function GetItemsPageCaption: string; virtual; abstract;
    function GetItemsPageVisible: Boolean; virtual;
    procedure InitPageControl; override;

    property ItemsListBox: TcxCustomGridTableItemsListBox read FItemsListBox;
  public
    procedure RefreshData; override;
    property ItemsPage: TcxTabSheet read FItemsPage;
  end;

  // popups

  IcxGridFilterPopupOwner = interface(IcxCustomGridPopupOwner)
    ['{1FC070B2-36E5-4388-B22D-1FF5D240E95F}']
    function GetItem: TcxCustomGridTableItem;
  end;

  TcxGridFilterPopupListBox = class(TcxGridPopupListBox)
  private
    function GetPopup: TcxGridFilterPopup;
  protected
    function CanHaveCheck(AItemIndex: Integer): Boolean; override;
    procedure DrawItemContent(ACanvas: TcxCanvas; AIndex: Integer; ARect: TRect;
      AState: TOwnerDrawState); override;
    function HasCheck(AItemIndex: Integer): Boolean; override;
  public
    property Popup: TcxGridFilterPopup read GetPopup;
  end;

  TcxGridFilterPopupClass = class of TcxGridFilterPopup;

  TcxGridFilterPopup = class(TcxCustomGridPopup)
  private
    FButton: TcxButton;
    FFilterChangedByCheck: Boolean;
    FItem: TcxCustomGridTableItem;
    FListBox: TcxGridFilterPopupListBox;
    FListBoxItems: TStringList;
    FValueList: TcxGridFilterValueList;
    function GetFilter: TcxDataFilterCriteria;
    function GetGridView: TcxCustomGridTableView;
    //function GetOwnerValue: IcxGridFilterPopupOwner;
    //procedure SetOwnerValue(Value: IcxGridFilterPopupOwner);
    procedure SetFilterChangedByCheck(Value: Boolean);
    procedure ButtonClicked(Sender: TObject);
    procedure ListBoxAction(Sender: TcxGridPopupListBox; AItemIndex: Integer);
  protected
    procedure AddListBoxItems; virtual;
    procedure AdjustListBoxSize; virtual;
    procedure ApplyFilterUsingCheckedItems(const AItemIndexes: TcxGridIndexes); virtual;
    procedure ApplyFilterUsingClickedItem(AItemIndex: Integer); virtual;
    function GetImmediateFilterUsingChecks: Boolean; virtual;
    function GetListBoxCheckedItemIndexes: TcxGridIndexes; virtual;
    function GetSelectedItemIndex: Integer; virtual;
    procedure InitButton; virtual;
    procedure InitListBox; virtual;
    procedure InitPopup; override;
    function IsButtonVisible: Boolean; virtual;
    function IsCheck(AItemIndex: Integer): Boolean; virtual;
    function IsMRUItemsListSeparator(AItemIndex: Integer): Boolean;
    function SupportsChecks: Boolean; virtual;
    procedure UpdateButtonEnabled; virtual;

    property Button: TcxButton read FButton;
    property Filter: TcxDataFilterCriteria read GetFilter;
    property FilterChangedByCheck: Boolean read FFilterChangedByCheck write SetFilterChangedByCheck;
    property ImmediateFilterUsingChecks: Boolean read GetImmediateFilterUsingChecks;
    property ListBox: TcxGridFilterPopupListBox read FListBox;
    property ListBoxItems: TStringList read FListBoxItems;
    property SelectedItemIndex: Integer read GetSelectedItemIndex;
    property ValueList: TcxGridFilterValueList read FValueList;
  public
    constructor Create(AGridView: TcxCustomGridView); override;
    destructor Destroy; override;
    procedure CloseUp; override;
    property GridView: TcxCustomGridTableView read GetGridView;
    property Item: TcxCustomGridTableItem read FItem;
//    property Owner: IcxGridFilterPopupOwner read GetOwnerValue write SetOwnerValue;
  end;

  TcxGridFilterMRUItemsPopupClass = class of TcxGridFilterMRUItemsPopup;

  TcxGridFilterMRUItemsPopup = class(TcxCustomGridPopup)
  private
    FListBox: TcxGridPopupListBox;
    function GetFiltering: TcxCustomGridTableFiltering;
    function GetGridView: TcxCustomGridTableView;
    procedure ListBoxAction(Sender: TcxGridPopupListBox; AItemIndex: Integer);
  protected
    procedure AddFilterMRUItems(AStrings: TStrings); virtual;
    procedure ApplyFilterMRUItem(AItemIndex: Integer); virtual;
    function GetTextOffsetHorz: Integer; virtual;
    procedure InitPopup; override;

    property Filtering: TcxCustomGridTableFiltering read GetFiltering;
    property ListBox: TcxGridPopupListBox read FListBox;
  public
    constructor Create(AGridView: TcxCustomGridView); override;
    property GridView: TcxCustomGridTableView read GetGridView;
    property TextOffsetHorz: Integer read GetTextOffsetHorz;
  end;

  TcxCustomGridCustomizationPopup = class(TcxCustomGridPopup)
  private
    FCheckListBox: TcxCheckListBox;
    FDragItemIndex: Integer;
    FScrollDirection: TcxDirection;
    FScrollTimer: TcxTimer;
    function GetGridView: TcxCustomGridTableView;
    procedure SetScrollDirection(Value: TcxDirection);
    procedure CheckListBoxClick(Sender: TObject);
    procedure CheckListBoxCheckClick(Sender: TObject; AIndex: Integer;
      APrevState, ANewState: TcxCheckBoxState);
    procedure CheckListBoxEndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure CheckListBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure CheckListBoxMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure CheckListBoxStartDrag(Sender: TObject; var DragObject: TDragObject);
    procedure CheckListBoxDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure CheckListBoxDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ScrollTimerHandler(Sender: TObject);
  protected
    procedure AddCheckListBoxItems; virtual; abstract;
    procedure AdjustCheckListBoxSize(AFixedHeight: Boolean = False); virtual;
    procedure CheckClicked(AIndex: Integer; AChecked: Boolean); virtual;
    procedure CreateCheckListBox; virtual;
    function GetCheckListBoxColumnWidth: Integer; virtual;
    function GetDropDownCount: Integer; virtual; abstract;
    function GetItemInsertionIndex(X, Y: Integer): Integer;
    procedure InitPopup; override;
    procedure RefreshCheckListBoxItems;
    function SupportsItemMoving: Boolean; virtual; abstract;

    procedure GetCheckListBoxSelectedItems(AItems: TList);
    procedure SetCheckListBoxSelectedItems(AItems: TList);

    procedure ItemClicked(AItem: TObject; AChecked: Boolean); virtual; abstract;
    function GetItemIndex(AItem: TObject): Integer; virtual; abstract;
    procedure SetItemIndex(AItem: TObject; AIndex: Integer); virtual; abstract;

    property CheckListBoxColumnWidth: Integer read GetCheckListBoxColumnWidth;
    property DragItemIndex: Integer read FDragItemIndex write FDragItemIndex;
    property ScrollDirection: TcxDirection read FScrollDirection write SetScrollDirection;
  public
    constructor Create(AGridView: TcxCustomGridView); override;
    procedure CloseUp; override;
    procedure CorrectBoundsWithDesktopWorkArea(var APosition: TPoint); override;
    procedure Popup; override;
    property CheckListBox: TcxCheckListBox read FCheckListBox;
    property GridView: TcxCustomGridTableView read GetGridView;
  end;

  TcxCustomGridItemsCustomizationPopupClass = class of TcxCustomGridItemsCustomizationPopup;

  TcxCustomGridItemsCustomizationPopup = class(TcxCustomGridCustomizationPopup)
  protected
    procedure AddCheckListBoxItems; override;
    function GetDropDownCount: Integer; override;
    function SupportsItemMoving: Boolean; override;

    procedure ItemClicked(AItem: TObject; AChecked: Boolean); override;
    function GetItemIndex(AItem: TObject): Integer; override;
    procedure SetItemIndex(AItem: TObject; AIndex: Integer); override;
  end;

  // controllers

  TcxGridEditingControllerClass = class of TcxGridEditingController;

  TcxGridEditingController = class
  private
    FController: TcxCustomGridTableController;
    FEdit: TcxCustomEdit;
    FEditHiding: Boolean;
    FEditingItem: TcxCustomGridTableItem;
    FEditingItemSetting: Boolean;
    FEditList: TcxInplaceEditList;
    FEditPreparing: Boolean;
    FEditShowingTimer: TcxTimer;
    FEditShowingTimerItem: TcxCustomGridTableItem;
    FEditUpdateNeeded: Boolean;
    FInitiatingEditing: Boolean;
    FIsEditPlaced: Boolean;
    FIsErrorOnEditExit: Boolean;
    FPrevEditOnChange: TNotifyEvent;
    FPrevEditOnEditValueChanged: TNotifyEvent;
    function GetEditingProperties: TcxCustomEditProperties;
    function GetGridView: TcxCustomGridTableView;
    function GetIsEditing: Boolean;
    procedure SetEditingItem(Value: TcxCustomGridTableItem);
    procedure EditShowingTimerHandler(Sender: TObject);
  protected
    procedure AfterViewInfoCalculate; virtual;
    procedure BeforeViewInfoCalculate; virtual;
    procedure CancelEditUpdatePost;
    function CanInitEditing: Boolean; virtual;
    function CanRemoveEditFocus: Boolean; virtual;
    function CanUpdateEditValue: Boolean; virtual;
    procedure CheckEdit;
    procedure CheckEditUpdatePost;
    procedure DoEditChanged; virtual;
    procedure DoEditKeyDown(var Key: Word; Shift: TShiftState); virtual;
    procedure DoUpdateEdit;
    function GetHideEditOnExit: Boolean; virtual;
    function GetHideEditOnFocusedRecordChange: Boolean; virtual;
    procedure InitEdit; virtual;
    procedure UninitEdit; virtual;
    procedure PostEditingData; virtual;
    procedure PostEditUpdate;
    function PrepareEdit(AItem: TcxCustomGridTableItem; AOnMouseEvent: Boolean): Boolean; virtual;
    procedure UpdateEditValue;
    procedure UpdateValue;

    procedure AssignEditEvents; virtual;
    procedure UnassignEditEvents; virtual;
    procedure EditAfterKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); virtual;
    procedure EditChanged(Sender: TObject); virtual;
    procedure EditEditing(Sender: TObject; var CanEdit: Boolean); virtual;
    procedure EditExit(Sender: TObject); virtual;
    procedure EditFocusChanged(Sender: TObject); virtual;
    procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); virtual;
    procedure EditKeyPress(Sender: TObject; var Key: Char); virtual;
    procedure EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); virtual;
    procedure EditPostEditValue(Sender: TObject); virtual;
    procedure EditValueChanged(Sender: TObject); virtual;

    property EditHiding: Boolean read FEditHiding;
    property EditingProperties: TcxCustomEditProperties read GetEditingProperties;
    property EditList: TcxInplaceEditList read FEditList;
    property EditPreparing: Boolean read FEditPreparing;
    property EditUpdateNeeded: Boolean read FEditUpdateNeeded;
    property HideEditOnExit: Boolean read GetHideEditOnExit;
    property HideEditOnFocusedRecordChange: Boolean read GetHideEditOnFocusedRecordChange;
    property InitiatingEditing: Boolean read FInitiatingEditing;
    property IsEditPlaced: Boolean read FIsEditPlaced;
    property IsErrorOnEditExit: Boolean read FIsErrorOnEditExit;
  public
    constructor Create(AController: TcxCustomGridTableController); virtual;

⌨️ 快捷键说明

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