📄 dbgrideh.pas
字号:
FExtScrollBar: TScrollBar;
FKind: TScrollBarKind;
FTracking: Boolean;
FVisibleMode: TScrollBarVisibleModeEh;
function GetVisible: Boolean;
procedure ExtScrollWindowProc(var Message: TMessage);
procedure SetExtScrollBar(const Value: TScrollBar);
procedure SetVisible(Value: Boolean);
procedure SetVisibleMode(const Value: TScrollBarVisibleModeEh);
public
constructor Create(AGrid: TCustomDBGridEh; AKind: TScrollBarKind);
destructor Destroy; override;
function GetScrollInfo(var ScrollInfo: TScrollInfo): Boolean;
function IsScrollBarVisible: Boolean;
procedure Assign(Source: TPersistent); override;
procedure UpdateExtScrollBar;
property Kind: TScrollBarKind read FKind;
property VisibleMode: TScrollBarVisibleModeEh read FVisibleMode write SetVisibleMode default sbAutoShowEh;
published
property ExtScrollBar: TScrollBar read FExtScrollBar write SetExtScrollBar;
property Tracking: Boolean read FTracking write FTracking default False;
property Visible: Boolean read GetVisible write SetVisible default True;
end;
TVertDBGridEhScrollBar = class(TDBGridEhScrollBar)
published
property Visible stored False;
property VisibleMode;
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;
function SelectionToGridRect: TGridRect;
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;
function SelectionToGridRect: TGridRect;
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;
function SelectionToGridRect: TGridRect;
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 }
THorzCellTypeEh = (hctIndicatorEh, hctDataEh);
TVertCellTypeEh = (vctTitleEh, vctSubTitleEh, vctDataEh, vctAboveFooterEh, vctFooterEh);
TCellTypeEh = record
HorzType: THorzCellTypeEh;
VertType: TVertCellTypeEh;
end;
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. }
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;
TGetBtnEhParamsEvent = procedure(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; var SortMarker: TSortMarkerEh;
IsDown: Boolean) of object;
{ Internal grid types }
TGridAxisDrawInfoEh = record
EffectiveLineWidth: Integer;
FirstGridCell: Integer;
FixedBoundary: Integer;
FixedCellCount: Integer;
FooterExtent: Integer;
FrozenExtent: Integer;
FullVisBoundary: Integer;
GetExtent: TGetExtentsFunc;
GridBoundary: Integer;
GridCellCount: Integer;
GridExtent: Integer;
LastFullVisibleCell: Longint;
end;
TGridDrawInfoEh = record
Horz, Vert: TGridAxisDrawInfoEh;
end;
TCustomDBGridEh = class(TCustomGrid)
private
// FIndicators: TImageList;
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;
FTitleOffset, FIndicatorOffset: Byte;
FTopDataOffset: Byte;
FTopLeftVisible: Boolean;
FUpdateLock: Byte;
FUserChange: Boolean;
FVertScrollBar: TDBGridEhScrollBar;
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); 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: TMessage); 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 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -