📄 dbgrideh.pas
字号:
public
property Items[Index: Integer]: TColumnEh read GetColumn write SetColumn; default;
end;
{ TGridDataLinkEh }
TGridDataLinkEh = class(TDataLink)
private
FFieldCount: Integer;
FFieldMap: Pointer;
FFieldMapSize: Integer;
FGrid: TCustomDBGridEh;
FInUpdateData: Boolean;
FModified: Boolean;
FSparseMap: Boolean;
function GetDefaultFields: Boolean;
function GetFields(I: Integer): TField;
protected
function GetMappedIndex(ColIndex: Integer): Integer;
procedure ActiveChanged; override;
procedure DataSetChanged; override;
procedure DataSetScrolled(Distance: Integer); override;
procedure EditingChanged; override;
procedure FocusControl(Field: TFieldRef); override;
procedure LayoutChanged; override;
procedure RecordChanged(Field: TField); override;
procedure UpdateData; override;
public
constructor Create(AGrid: TCustomDBGridEh);
destructor Destroy; override;
function AddMapping(const FieldName: string): Boolean;
procedure ClearMapping;
procedure Modified;
procedure Reset;
property DefaultFields: Boolean read GetDefaultFields;
property FieldCount: Integer read FFieldCount;
property Fields[I: Integer]: TField read GetFields;
property SparseMap: Boolean read FSparseMap write FSparseMap;
end;
{ TBookmarkListEh }
TBookmarkListEh = class
private
FCache: TBookmarkStr;
FCacheFind: Boolean;
FCacheIndex: Integer;
FGrid: TCustomDBGridEh;
FLinkActive: Boolean;
FList: TStringList;
function GetCount: Integer;
function GetCurrentRowSelected: Boolean;
function GetItem(Index: Integer): TBookmarkStr;
procedure SetCurrentRowSelected(Value: Boolean);
procedure StringsChanged(Sender: TObject);
protected
function Compare(const Item1, Item2: TBookmarkStr): Integer;
function CurrentRow: TBookmarkStr;
procedure LinkActive(Value: Boolean);
public
constructor Create(AGrid: TCustomDBGridEh);
destructor Destroy; override;
function Find(const Item: TBookmarkStr; var Index: Integer): Boolean;
function IndexOf(const Item: TBookmarkStr): Integer;
function Refresh: Boolean;// drop orphaned bookmarks; True = orphans found
procedure Clear; // free all bookmarks
procedure Delete; // delete all selected rows from dataset
procedure SelectAll;
property Count: Integer read GetCount;
property CurrentRowSelected: Boolean read GetCurrentRowSelected
write SetCurrentRowSelected;
property Items[Index: Integer]: TBookmarkStr read GetItem; default;
end;
{ THeadTreeNode }
THeadTreeNode = class;
TDBGridEh = class;
LeafCol = record
FLeaf:THeadTreeNode;
FColumn:TColumnEh;
end;
PLeafCol = ^LeafCol;
TLeafCol = array[0..MaxListSize - 1] of LeafCol;
PTLeafCol = ^TLeafCol;
THeadTreeProc = procedure (node:THeadTreeNode) of object;
THeadTreeNode = class(TObject)
public
Child:THeadTreeNode;
Column:TColumnEh;
Drawed:Boolean;
Height:Integer;
HeightPrn:Integer;
Host:THeadTreeNode;
Next:THeadTreeNode;
Text:String;
VLineWidth:Integer;
Width:Integer;
WidthPrn:Integer;
WIndent:Integer;
constructor Create;
constructor CreateText(AText:String;AHeight,AWidth:Integer);
destructor Destroy; override;
function Add(AAfter:THeadTreeNode;AText:String;AHeight,AWidth:Integer):THeadTreeNode ;
function AddChild(ANode:THeadTreeNode;AText:String;AHeight,AWidth:Integer):THeadTreeNode ;
function Find(ANode:THeadTreeNode):Boolean;
procedure CreateFieldTree(AGrid:TCustomDBGridEh);
procedure DoForAllNode(proc:THeadTreeProc);
procedure FreeAllChild;
procedure Union(AFrom,ATo :THeadTreeNode; AText:String;AHeight:Integer);
end;
{ TDBGridEhSumList }
TDBGridEhSumList = class(TDBSumListProducer)
private
function GetActive: Boolean;
procedure SetActive(const Value: Boolean);
protected
procedure ReturnEvents; override;
public
constructor Create(AOwner:TComponent);
procedure SetDataSetEvents; override;
published
property Active: Boolean read GetActive write SetActive default False;
property ExternalRecalc default False;
property SumListChanged;
property VirtualRecords default False;
property OnRecalcAll;
end;
{TDBGridEhScrollBar}
TDBGridEhScrollBar = class(TPersistent)
private
FDBGridEh: TCustomDBGridEh;
FKind: TScrollBarKind;
FTracking: Boolean;
FVisible: Boolean;
procedure SetVisible(Value: Boolean);
public
constructor Create(AGrid: TCustomDBGridEh; AKind: TScrollBarKind);
function IsScrollBarVisible: Boolean;
procedure Assign(Source: TPersistent); override;
property Kind: TScrollBarKind read FKind;
published
property Tracking: Boolean read FTracking write FTracking default False;
property Visible: Boolean read FVisible write SetVisible default True;
end;
TDBGridEhSelectionType = (gstNon, gstRecordBookmarks, gstRectangle, gstColumns, gstAll);
TDBGridEhAllowedSelection = gstRecordBookmarks..gstAll;
TDBGridEhAllowedSelections = set of TDBGridEhAllowedSelection;
TDBCell = record
Col : Longint;
Row : TBookmarkStr;
end;
{ TDBGridEhSelectionRect }
TDBGridEhSelectionRect = class(TObject)
private
FAnchor:TDBCell;
FGrid:TCustomDBGridEh;
FShiftCell:TDBCell;
function BoxRect(ALeft:Longint; ATop:TBookmarkStr; ARight:Longint; ABottom:TBookmarkStr): TRect;
function CheckState:Boolean;
function GetBottomRow: TBookmarkStr;
function GetLeftCol: Longint;
function GetRightCol: Longint;
function GetTopRow: TBookmarkStr;
public
constructor Create(AGrid:TCustomDBGridEh);
function DataCellSelected(DataCol :Longint; DataRow :TBookmarkStr):Boolean;
procedure Clear;
procedure Select(ACol :Longint; ARow :TBookmarkStr; AddSel:Boolean);
property BottomRow: TBookmarkStr read GetBottomRow;
property LeftCol: Longint read GetLeftCol;
property RightCol: Longint read GetRightCol;
property TopRow: TBookmarkStr read GetTopRow;
end;
{ TDBGridEhSelectionCols }
TDBGridEhSelectionCols = class(TColumnsEhList)
private
FAnchor:TColumnEh;
FGrid:TCustomDBGridEh;
FShiftCol:TColumnEh;
FShiftSelectedCols:TColumnsEhList;
procedure Add(ACol: TColumnEh);
public
constructor Create(AGrid:TCustomDBGridEh);
destructor Destroy; override;
procedure Clear; override;
procedure InvertSelect(ACol: TColumnEh);
procedure Refresh;
procedure Select(ACol: TColumnEh; AddSel:Boolean);
procedure SelectShift(ACol: TColumnEh{; Clear:Boolean});
end;
{ TDBGridEhSelection }
TDBGridEhSelection = class
private
FColumns:TDBGridEhSelectionCols;
FGrid:TCustomDBGridEh;
FRect:TDBGridEhSelectionRect;
FSelectionType:TDBGridEhSelectionType;
function GetRows: TBookmarkListEh;
procedure LinkActive(Value: Boolean);
procedure SetSelectionType(ASelType:TDBGridEhSelectionType);
public
constructor Create(AGrid:TCustomDBGridEh);
destructor Destroy; override;
function DataCellSelected(DataCol :Longint; DataRow :TBookmarkStr):Boolean;
procedure Clear;
procedure Refresh;
procedure SelectAll;
procedure UpdateState;
property Columns: TDBGridEhSelectionCols read FColumns;
property Rect: TDBGridEhSelectionRect read FRect;
property Rows: TBookmarkListEh read GetRows;
property SelectionType:TDBGridEhSelectionType read FSelectionType;
end;
{ TCustomDBGridEh }
TDBGridEhOption = (dghFixed3D, dghFrozen3D, dghFooter3D, dghData3D, dghResizeWholeRightPart,
dghHighlightFocus, dghClearSelection, dghFitRowHeightToText, dghAutoSortMarking,
dghMultiSortMarking, dghEnterAsTab, dghTraceColSizing, dghIncSearch,
dghPreferIncSearch, dghRowHighlight);
TDBGridEhOptions = set of TDBGridEhOption;
TDBGridEhState = (dgsNormal, dgsRowSelecting, dgsColSelecting, dgsRectSelecting,
dgsPosTracing, dgsTitleDown, dgsColSizing);
TDBGridEhAllowedOperation = (alopInsertEh, alopUpdateEh, alopDeleteEh, alopAppendEh);
TDBGridEhAllowedOperations = set of TDBGridEhAllowedOperation;
TDBGridEhEditAction = (geaCutEh, geaCopyEh, geaPasteEh, geaDeleteEh, geaSelectAllEh);
TDBGridEhEditActions = set of TDBGridEhEditAction;
TInpsDirectionEh = (inpsFromFirstEh,inpsToNextEh,inpsToPriorEh);
{ The DBGridEh's DrawDataCell virtual method and OnDrawDataCell event are only
called when the grid's Columns.State is csDefault. This is for compatibility
with existing code. These routines don't provide sufficient information to
determine which column is being drawn, so the column attributes aren't
easily accessible in these routines. Column attributes also introduce the
possibility that a column's field may be nil, which would break existing
DrawDataCell code. DrawDataCell, OnDrawDataCell, and DefaultDrawDataCell
are obsolete, retained for compatibility purposes. }
(* TDrawDataCellEvent = procedure (Sender: TObject; const Rect: TRect; Field: TField;
State: TGridDrawState) of object; *)
{ The DBGridEh's DrawColumnCell virtual method and OnDrawColumnCell event are
always called, when the grid has defined column attributes as well as when
it is in default mode. These new routines provide the additional
information needed to access the column attributes for the cell being
drawn, and must support nil fields. }
TDrawColumnEhCellEvent = procedure (Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState) of object;
TDBGridEhClickEvent = procedure (Column: TColumnEh) of object;
TDrawFooterCellEvent = procedure (Sender: TObject; DataCol, Row: Longint;
Column: TColumnEh; Rect: TRect; State: TGridDrawState) of object;
TGetFooterParamsEvent = procedure (Sender: TObject; DataCol, Row: Longint;
Column: TColumnEh; AFont: TFont; var Background: TColor;
var Alignment : TAlignment; State: TGridDrawState; var Text:String) of object;
TTitleEhClickEvent = procedure (Sender: TObject; ACol: Longint;
Column: TColumnEh) of object;
TCheckTitleEhBtnEvent = procedure (Sender: TObject; ACol: Longint;
Column: TColumnEh; var Enabled: Boolean) of object;
TGetBtnEhParamsEvent = procedure (Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; var SortMarker: TSortMarkerEh;
IsDown: Boolean) of object;
TGetCellEhParamsEvent = procedure (Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState) of object;
{ Internal grid types }
TGridAxisDrawInfoEh = record
EffectiveLineWidth: Integer;
FirstGridCell: Integer;
FixedBoundary: Integer;
FixedCellCount: Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -