cxgridcustomtableview.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,405 行 · 第 1/5 页
PAS
1,405 行
{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressQuantumGrid }
{ }
{ Copyright (c) 1998-2008 Developer Express Inc. }
{ ALL RIGHTS RESERVED }
{ }
{ The entire contents of this file is protected by U.S. and }
{ International Copyright Laws. Unauthorized reproduction, }
{ reverse-engineering, and distribution of all or any portion of }
{ the code contained in this file is strictly prohibited and may }
{ result in severe civil and criminal penalties and will be }
{ prosecuted to the maximum extent possible under the law. }
{ }
{ RESTRICTIONS }
{ }
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
{ LICENSED TO DISTRIBUTE THE EXPRESSQUANTUMGRID AND ALL }
{ ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{ }
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
{ }
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
{ ADDITIONAL RESTRICTIONS. }
{ }
{********************************************************************}
unit cxGridCustomTableView;
{$I cxVer.inc}
interface
uses
{$IFDEF DELPHI6}
Variants,
{$ENDIF}
Windows, Messages, Classes, Graphics, Controls, Forms, StdCtrls, Dialogs,
cxClasses, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
cxStorage, cxPC, cxFilterControl, cxNavigator, cxListBox, cxEdit, cxButtons,
cxDataStorage, cxCustomData, cxData, cxFilter, cxDataUtils, cxContainer,
cxCheckBox, cxCheckListBox, cxStyles, cxGridCommon, cxGridCustomView;
const
cxGridFilterDefaultItemMRUItemsListCount = 5;
cxGridFilterDefaultItemPopupMaxDropDownItemCount = 15;
cxGridFilterDefaultMRUItemsListCount = 10;
cxGridItemDefaultMinWidth = 20;
cxGridNavigatorDefaultOffset = 50;
htCustomGridTableBase = 100;
htFilter = htCustomGridTableBase + 1;
htFilterActivateButton = htCustomGridTableBase + 2;
htFilterCloseButton = htCustomGridTableBase + 3;
htFilterDropDownButton = htCustomGridTableBase + 4;
htFilterCustomizeButton = htCustomGridTableBase + 5;
htRecord = htCustomGridTableBase + 6;
htCell = htCustomGridTableBase + 7;
htExpandButton = htCustomGridTableBase + 8;
// record kind
rkNone = -1;
rkNormal = 0;
rkNewItem = 1;
isCustomItemFirst = 0;
isContent = isCustomItemFirst;
isCustomItemLast = isContent;
bbCustomTableFirst = bbCustomLast + 1;
bbContent = bbCustomTableFirst;
bbFilterBox = bbCustomTableFirst + 1;
bbCustomTableLast = bbFilterBox;
vsCustomTableFirst = vsCustomLast + 1;
vsContent = vsCustomTableFirst;
vsContentEven = vsCustomTableFirst + 1;
vsContentOdd = vsCustomTableFirst + 2;
vsFilterBox = vsCustomTableFirst + 3;
vsInactive = vsCustomTableFirst + 4;
vsIncSearch = vsCustomTableFirst + 5;
vsSelection = vsCustomTableFirst + 6;
vsCustomTableLast = vsSelection;
type
TcxGridItemDataBindingClass = class of TcxGridItemDataBinding;
TcxCustomGridDateRange = class;
TcxGridDateRanges = class;
TcxCustomGridRecord = class;
TcxCustomGridTableViewData = class;
TcxCustomGridTableItemsListBox = class;
TcxCustomGridTableCustomizationForm = class;
TcxGridFilterPopup = class;
TcxCustomGridTableController = class;
TcxCustomGridFilterButtonViewInfo = class;
TcxGridFilterActivateButtonViewInfo = class;
TcxGridFilterButtonsViewInfo = class;
TcxGridFilterViewInfo = class;
TcxGridTableDataCellViewInfo = class;
TcxCustomGridRecordViewInfoClass = class of TcxCustomGridRecordViewInfo;
TcxCustomGridRecordViewInfo = class;
TcxCustomGridRecordsViewInfo = class;
TcxCustomGridTableViewInfo = class;
TcxCustomGridTableViewInfoCacheItem = class;
TcxCustomGridTableItem = class;
TcxCustomGridTableDateTimeHandling = class;
TcxCustomGridTableFiltering = class;
TcxCustomGridTableView = class;
{ changes }
TcxGridDataChange = class(TcxCustomGridViewChange)
public
procedure Execute; override;
function IsLockable: Boolean; override;
end;
TcxGridRecordChange = class(TcxCustomGridViewChange)
private
FItem: TcxCustomGridTableItem;
FRecord: TcxCustomGridRecord;
FRecordIndex: Integer;
function GetGridView: TcxCustomGridTableView;
function GetRecordViewInfo: TcxCustomGridRecordViewInfo;
public
constructor Create(AGridView: TcxCustomGridView; ARecord: TcxCustomGridRecord;
ARecordIndex: Integer; AItem: TcxCustomGridTableItem = nil); reintroduce; virtual;
procedure Execute; override;
function IsCompatibleWith(AChange: TcxCustomGridChange): Boolean; override;
function IsEqual(AChange: TcxCustomGridChange): Boolean; override;
function IsItemVisible: Boolean;
property GridRecord: TcxCustomGridRecord read FRecord;
property GridView: TcxCustomGridTableView read GetGridView;
property Item: TcxCustomGridTableItem read FItem;
property RecordIndex: Integer read FRecordIndex;
property RecordViewInfo: TcxCustomGridRecordViewInfo read GetRecordViewInfo;
end;
TcxGridFocusedRecordChange = class(TcxCustomGridViewChange)
private
FFocusedRecordIndex: Integer;
FNewItemRecordFocusingChanged: Boolean;
FPrevFocusedRecordIndex: Integer;
public
constructor Create(AGridView: TcxCustomGridView;
APrevFocusedRecordIndex, AFocusedRecordIndex: Integer;
ANewItemRecordFocusingChanged: Boolean); reintroduce; virtual;
function CanExecuteWhenLocked: Boolean; override;
procedure Execute; override;
property FocusedRecordIndex: Integer read FFocusedRecordIndex;
property NewItemRecordFocusingChanged: Boolean read FNewItemRecordFocusingChanged;
property PrevFocusedRecordIndex: Integer read FPrevFocusedRecordIndex;
end;
{ hit tests }
TcxGridFilterHitTest = class(TcxCustomGridViewHitTest)
protected
class function GetHitTestCode: Integer; override;
end;
TcxGridFilterCloseButtonHitTest = class(TcxCustomGridViewHitTest)
protected
class function GetHitTestCode: Integer; override;
end;
TcxGridFilterActivateButtonHitTest = class(TcxCustomGridViewHitTest)
protected
class function GetHitTestCode: Integer; override;
end;
TcxGridFilterDropDownButtonHitTest = class(TcxCustomGridViewHitTest)
protected
class function GetHitTestCode: Integer; override;
end;
TcxGridFilterCustomizeButtonHitTest = class(TcxCustomGridViewHitTest)
protected
class function GetHitTestCode: Integer; override;
end;
TcxGridRecordHitTest = class(TcxCustomGridViewHitTest)
private
FGridRecordIndex: Integer;
FGridRecordKind: Integer;
FViewData: TcxCustomGridTableViewData;
function GetGridRecord: TcxCustomGridRecord;
procedure SetGridRecord(Value: TcxCustomGridRecord);
protected
class function GetHitTestCode: Integer; override;
public
class function CanClick: Boolean; virtual;
property GridRecord: TcxCustomGridRecord read GetGridRecord write SetGridRecord;
end;
TcxGridRecordCellHitTest = class(TcxGridRecordHitTest)
protected
class function GetHitTestCode: Integer; override;
public
Item: TcxCustomGridTableItem;
end;
TcxGridExpandButtonHitTest = class(TcxGridRecordHitTest)
protected
class function GetHitTestCode: Integer; override;
public
class function CanClick: Boolean; override;
end;
{ data definitions }
TcxGridDefaultValuesProvider = class(TcxCustomEditDefaultValuesProvider)
public
function IsDisplayFormatDefined(AIsCurrencyValueAccepted: Boolean): Boolean; override;
end;
IcxGridDataController = interface
['{FEEE7E69-BD54-4B5D-BA0B-B6116B69C0CC}']
procedure CheckGridModeBufferCount;
function DoScroll(AForward: Boolean): Boolean;
function DoScrollPage(AForward: Boolean): Boolean;
function GetItemDataBindingClass: TcxGridItemDataBindingClass;
function GetItemDefaultValuesProviderClass: TcxCustomEditDefaultValuesProviderClass;
function GetNavigatorIsBof: Boolean;
function GetNavigatorIsEof: Boolean;
//function GetFilterPropertyValue(const AName: string; var AValue: Variant): Boolean;
function GetScrollBarPos: Integer;
function GetScrollBarRecordCount: Integer;
//function SetFilterPropertyValue(const AName: string; const AValue: Variant): Boolean;
function SetScrollBarPos(Value: Integer): Boolean;
end;
TcxGridDataController = class(TcxDataController,
IcxCustomGridDataController, IcxGridDataController)
private
FLoadedData: TMemoryStream;
function GetGridViewValue: TcxCustomGridTableView;
procedure ReadData(Stream: TStream);
procedure WriteData(Stream: TStream);
protected
{ IcxCustomGridDataController }
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;
{ IcxGridDataController }
procedure CheckGridModeBufferCount;
function DoScroll(AForward: Boolean): Boolean;
function DoScrollPage(AForward: Boolean): Boolean;
//function GetFilterPropertyValue(const AName: string; var AValue: Variant): Boolean;
function GetItemDataBindingClass: TcxGridItemDataBindingClass;
function GetItemDefaultValuesProviderClass: TcxCustomEditDefaultValuesProviderClass;
function GetNavigatorIsBof: Boolean;
function GetNavigatorIsEof: Boolean;
function GetScrollBarPos: Integer;
function GetScrollBarRecordCount: Integer;
//function SetFilterPropertyValue(const AName: string; const AValue: Variant): Boolean;
function SetScrollBarPos(Value: Integer): Boolean;
function CanSelectRow(ARowIndex: Integer): Boolean; override;
function CompareByField(ARecordIndex1, ARecordIndex2: Integer;
AField: TcxCustomDataField; AMode: TcxDataControllerComparisonMode): Integer; override;
procedure DefineProperties(Filer: TFiler); override;
procedure DoValueTypeClassChanged(AItemIndex: Integer); override;
procedure FilterChanged; override;
function GetDefaultActiveRelationIndex: Integer; override;
function GetFilterDisplayText(ARecordIndex, AItemIndex: Integer): string; override;
//function GetIncrementalSearchText(ARecordIndex, AItemIndex: Integer): string; override;
function GetItemID(AItem: TObject): Integer; override;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?