📄 dbgrideh.pas
字号:
TCustomDBGridEh = class(TCustomGrid, IInplaceEditHolderEh {$IFNDEF CIL}, IUnknown {$ENDIF})
private
FAllowedOperations: TDBGridEhAllowedOperations;
FAllowedSelections: TDBGridEhAllowedSelections;
FAutoDrag, FSelectedCellPressed: Boolean;
FBookmarks: TBookmarkListEh;
FCanvasHandleAllocated: Boolean;
FColumnDefValues: TColumnDefValuesEh;
FColumns: TDBGridColumnsEh;
FCompleteKeyPress: String;
FDataLink: TGridDataLinkEh;
FDefaultDrawing: Boolean;
FEditActions: TDBGridEhEditActions;
FEditKeyValue: Variant; // For lookup fields and KeyList based column
FEditText: string;
FFlat: Boolean;
FFooterColor: TColor;
FFooterFont: TFont;
FHintFont: TFont;
FHorzScrollBar: TDBGridEhScrollBar;
FInColExit: Boolean;
FInterlinear: Integer;
FLayoutFromDataset: Boolean;
FLayoutLock: Byte;
FOnCellClick: TDBGridEhClickEvent;
FOnColEnter: TNotifyEvent;
FOnColExit: TNotifyEvent;
FOnColumnMoved: TMovedEvent;
FOnColWidthsChanged: TNotifyEvent;
FOnDrawColumnCell: TDrawColumnEhCellEvent;
FOnDrawDataCell: TDrawDataCellEvent;
FOnEditButtonClick: TNotifyEvent;
FOnGetCellParams: TGetCellEhParamsEvent;
FOnGetFooterParams: TGetFooterParamsEvent;
FOnSortMarkingChanged: TNotifyEvent;
FOnSumListAfterRecalcAll: TNotifyEvent;
FOnSumListRecalcAll: TNotifyEvent;
FOnTitleClick: TDBGridEhClickEvent;
FOptions: TDBGridOptions;
FOptionsEh: TDBGridEhOptions;
{$IFDEF EH_LIB_VCL}
FOriginalImeMode: TImeMode;
FOriginalImeName: TImeName;
{$ENDIF}
FReadOnly: Boolean;
FSelecting: Boolean;
FSelection: TDBGridEhSelection;
FSelectionAnchor: TBookmarkStr;
FSelfChangingFooterFont: Boolean;
FSelfChangingTitleFont: Boolean;
FSelRow: Integer;
FSizingIndex: Longint;
FSizingPos, FSizingOfs: Integer;
FSortLocal: Boolean;
FSortMarking: Boolean;
FStyle: TDBGridEhStyle;
FSumListRecalcing: Boolean;
FThumbTracked: Boolean;
FTitleFont: TFont;
FTitleImages: TCustomImageList;
FTitleImageChangeLink: TChangeLink;
FTitleOffset: Byte;
FIndicatorOffset: Byte;
FTopDataOffset: Byte;
FTopLeftVisible: Boolean;
FUpdateLock: Byte;
FUserChange: Boolean;
FVertScrollBar: TDBGridEhScrollBar;
FIntMemTable: IMemTableEh;
FOldActiveRecord: Integer;
FLockAutoShowCurCell: Boolean;
FFetchingRecords: Boolean;
FTryUseMemTableInt: Boolean;
FSTFilter: TSTDBGridEhFilter;
FFilterCol: Integer;
FFilterEditMode: Boolean;
FFilterEdit: TCustomDBEditEh;
FOnApplyFilter: TNotifyEvent;
FDownMouseMessageTime: LongInt;
FBufferedPaint: Boolean;
function MemTableSupport: Boolean;
procedure CheckIMemTable;
procedure MTUpdateRowCount;
procedure MTScroll(Distance: Integer);
function IsCurrentRow(DataRowNum: Integer): Boolean;
procedure FetchRecordsInView;
procedure InstantReadRecordEnter(DataRowNum: Integer);
procedure InstantReadRecordLeave;
procedure MTUpdateVertScrollBar;
procedure MTUpdateTopRow;
procedure MTWMVScroll(var Message: TWMVScroll);
procedure SafeMoveTop(ATop: Integer);
function GetCol: Longint;
function GetDataSource: TDataSource;
function GetFieldColumns(const FieldName: String): TColumnEh;
function GetFieldCount: Integer;
function GetFields(FieldIndex: Integer): TField;
function GetRowHeights(Index: Longint): Integer;
function GetSelectedField: TField;
function GetSelectedIndex: Integer;
function GetTopDataOffset: Byte;
function IsActiveControl: Boolean;
procedure CalcDrawInfoXYEh(var DrawInfo: TGridDrawInfoEh; UseWidth, UseHeight: Integer);
procedure ChangeGridOrientation(RightToLeftOrientation: Boolean);
procedure ClearSelection;
{$IFDEF EH_LIB_VCL}
procedure CMCancelMode(var Message: TCMCancelMode); message CM_CancelMode;
procedure CMDeferLayout(var Message: TMessage); message cm_DeferLayout;
procedure CMDesignHitTest(var Msg: TCMDesignHitTest); message CM_DESIGNHITTEST;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
procedure CMHintsShowPause(var Message: TCMHintShowPause); message CM_HINTSHOWPAUSE;
procedure CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;
procedure CMParentColorChanged(var Message: TMessage); message CM_PARENTCOLORCHANGED;
procedure CMParentFontChanged(var Message: TCMParentFontChanged); message CM_PARENTFONTCHANGED;
procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE;
{$ENDIF}
procedure DoSelection(Select: Boolean; Direction: Integer; MaxDirection, RowOnly: Boolean);
procedure DrawEdgeEh(ACanvas: TCanvas; qrc: TRect; IsDown, IsSelected: Boolean; NeedLeft, NeedRight: Boolean);
procedure EditingChanged;
procedure FooterFontChanged(Sender: TObject);
procedure InternalLayout;
procedure MoveCol(RawCol, Direction: Integer; Select: Boolean);
procedure ReadColumns(Reader: TReader);
procedure RecordChanged(Field: TField);
procedure SetAllowedSelections(const Value: TDBGridEhAllowedSelections);
procedure SetCol(Value: Longint);
procedure SetColumnDefValues(const Value: TColumnDefValuesEh);
procedure SetColumns(Value: TDBGridColumnsEh);
procedure SetDataSource(Value: TDataSource);
procedure SetDrawMemoText(const Value: Boolean);
procedure SetFilterEditMode(const Value: Boolean);
procedure SetFlat(const Value: Boolean);
procedure SetFooterColor(Value: TColor);
procedure SetFooterFont(Value: TFont);
procedure SetHorzScrollBar(const Value: TDBGridEhScrollBar);
procedure SetIme;
procedure SetOptions(Value: TDBGridOptions);
procedure SetOptionsEh(const Value: TDBGridEhOptions);
procedure SetReadOnly(const Value: Boolean);
procedure SetSelectedField(Value: TField);
procedure SetSelectedIndex(Value: Integer);
procedure SetSTFilter(const Value: TSTDBGridEhFilter);
procedure SetStyle(const Value: TDBGridEhStyle);
procedure SetSumList(const Value: TDBGridEhSumList);
procedure SetTitleFont(Value: TFont);
procedure SetTitleImages(const Value: TCustomImageList);
procedure SetVertScrollBar(const Value: TDBGridEhScrollBar);
procedure TitleFontChanged(Sender: TObject);
procedure TitleImageListChange(Sender: TObject);
procedure UpdateData;
procedure UpdateIme;
{$IFDEF EH_LIB_VCL}
procedure WMCancelMode(var Message: TWMCancelMode); message WM_CANCELMODE;
procedure WMChar(var Message: TWMChar); message WM_CHAR;
procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND; //tmp
procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMIMEStartComp(var Message: TMessage); message WM_IME_STARTCOMPOSITION;
procedure WMKillFocus(var Message: TWMKillFocus); message WM_KillFocus;
procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
procedure WMRButtonDown(var Message: TWMRButtonDown); message WM_RBUTTONDOWN;
procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SetFOCUS;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMTimer(var Message: TWMTimer); message WM_TIMER;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
{$ENDIF}
procedure WriteColumns(Writer: TWriter);
procedure PaintInplaceButton(Canvas: TCanvas;
ButtonStyle: TEditButtonStyleEh; Rect, ClipRect: TRect;
DownButton: Integer; Active, Flat, Enabled: Boolean;
ParentColor: TColor; Bitmap: TBitmap);
protected
{ IInplaceEditHolderEh }
function InplaceEditCanModify(Control: TWinControl): Boolean;
procedure GetMouseDownInfo(var Pos: TPoint; var Time: LongInt);
procedure InplaceEditKeyDown(Control: TWinControl; var Key: Word; Shift: TShiftState);
procedure InplaceEditKeyPress(Control: TWinControl; var Key: Char);
procedure InplaceEditKeyUp(Control: TWinControl; var Key: Word; Shift: TShiftState);
procedure InplaceEditWndProc(Control: TWinControl; var Message: TMessage);
protected
// FSortMarkerImages: TImageList;
FAcquireFocus: Boolean;
FAllowWordWrap: Boolean; // True if RowHeight + 3 > TextHeight
FAntiSelection: Boolean;
FAutoFitColWidths: Boolean;
FBorderWidth: Integer;
FColCellParamsEh: TColCellParamsEh;
FDataTracking: Boolean;
FDBGridEhState: TDBGridEhState;
FDefaultRowChanged: Boolean;
FDownMousePos: TPoint;
FDrawMemoText: Boolean;
FFooterRowCount: Integer;
FFrozenCols: Integer;
FHeadTree: THeadTreeNode;
FHTitleMargin: Integer;
FIndicatorPressed: Boolean;
FInplaceEditorButtonHeight: Integer;
FInplaceEditorButtonWidth: Integer;
FInplaceSearching: Boolean;
FInplaceSearchingInProcess: Boolean;
FInplaceSearchText: String;
FInplaceSearchTimeOut: Integer;
FInplaceSearchTimerActive: Boolean;
FLeafFieldArr: PTLeafCol;
FLockedBookmark: TBookmarkStr;
FLockPaint: Boolean;
FLookedOffset: Integer;
FMinAutoFitWidth: Integer;
FMouseShift: TShiftState;
FMoveMousePos: TPoint;
FNewRowHeight: Integer;
FOnCheckButton: TCheckTitleEhBtnEvent;
FOnDrawFooterCell: TDrawFooterCellEvent;
FOnGetBtnParams: TGetBtnEhParamsEvent;
FOnTitleBtnClick: TTitleEhClickEvent;
FPressed: Boolean;
FPressedCell: TGridCoord;
FPressedCol: Longint;
FRowLines: Integer;
FRowSizingAllowed: Boolean;
FSelectionActive: Boolean;
FSelectionAnchorSelected: Boolean;
FSortMarkedColumns: TColumnsEhList;
FSumList: TDBGridEhSumList;
FSwapButtons: Boolean;
FTimerActive: Boolean;
FTimerInterval: Integer;
FTitleHeight: Integer;
FTitleHeightFull: Integer;
FTitleLines: Integer;
FTracking: Boolean;
FUpdateFields: Boolean;
FUseMultiTitle: Boolean;
FVertScrollBarVisibleMode: TScrollBarVisibleModeEh;
FVisibleColumns: TColumnsEhList;
FVTitleMargin: Integer;
function AcquireFocus: Boolean; virtual;
function AcquireLayoutLock: Boolean;
function AllowedOperationUpdate: Boolean;
function BoxRect(ALeft, ATop, ARight, ABottom: Longint): TRect;
function CanDrawFocusRowRect: Boolean; virtual;
function CanEditAcceptKey(Key: Char): Boolean; override;
function CanEditModify: Boolean; override;
function CanEditModifyColumn(Index: Integer): Boolean;
function CanEditModifyText: Boolean;
function CanEditorMode: Boolean; virtual;
function CanEditShow: Boolean; override;
function CanSelectType(const Value: TDBGridEhSelectionType): Boolean;
function CellHave3DRect(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState): Boolean; virtual;
function CellIsMultiSelected(ACol, ARow: Integer; DataCol: Integer; DataRowBkmrk: TBookmarkStr): Boolean; virtual;
function CellTreeElementMouseDown(ACol, ARow, MouseX, MouseY: Integer): Boolean; virtual;
function CreateColumnDefValues: TColumnDefValuesEh; dynamic;
function CreateColumns: TDBGridColumnsEh; dynamic;
function CreateEditor: TInplaceEdit; override;
function CreateScrollBar(AKind: TScrollBarKind): TDBGridEhScrollBar; dynamic;
function DataToRawColumn(ACol: Integer): Integer;
{$IFDEF EH_LIB_VCL}
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
{$ENDIF}
function FrozenSizing(X, Y: Integer): Boolean;
function GetCellType(ACol, ARow: Integer; var DataCol, DataRow: Integer): TCellTypeEh;
function GetColField(DataCol: Integer): TField;
function GetColWidths(Index: Longint): Integer;
function GetCellTreeElmentsAreaWidth: Integer;
function GetEditLimit: Integer; override;
{$IFDEF EH_LIB_VCL}
function GetEditMask(ACol, ARow: Longint): string; override;
function GetEditText(ACol, ARow: Longint): string; override;
{$ENDIF}
function GetFieldValue(ACol: Integer): string;
function GetFooterRowCount: Integer;
function GetRowHeight: Integer;
function GetRowLines: Integer;
function GetSubTitleRowHeights(ASubTitleRow: Integer): Integer;
function GetSubTitleRows: Integer; virtual;
function GetTitleRows: Integer; virtual;
function HighlightNoDataCellColor(ACol, ARow: Integer; DataCol, DataRow: Integer;
CellType: TCellTypeEh; AState: TGridDrawState; InMultiSelect: Boolean; var AColor: TColor;
AFont: TFont): Boolean; virtual;
function HighlightDataCellColor(DataCol, DataRow: Integer; const Value: string;
AState: TGridDrawState; var AColor: TColor; AFont: TFont): Boolean; virtual;
function InplaceEditorVisible: Boolean;
function IsSelectionActive: Boolean; virtual;
function RawToDataColumn(ACol: Integer): Integer;
function ReadTitleHeight: Integer;
function ReadTitleLines: Integer;
function SetChildTreeHeight(ANode: THeadTreeNode): Integer;
function StdDefaultRowHeight: Integer;
function StoreColumns: Boolean;
function VisibleDataRowCount: Integer;
procedure BeginLayout;
procedure BeginUpdate;
procedure CalcDrawInfoEh(var DrawInfo: TGridDrawInfoEh);
procedure CalcFixedInfoEh(var DrawInfo: TGridDrawInfoEh);
procedure CalcFrozenSizingS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -