📄 dbgrideh.pas
字号:
FBookmarks: TBookmarkListEh;
FSelectionAnchor: TBookmarkStr;
FOnCellClick: TDBGridEhClickEvent;
FOnTitleClick:TDBGridEhClickEvent;
//ddd
FOnGetCellParams: TGetCellEhParamsEvent;
FOnGetFooterParams: TGetFooterParamsEvent;
FOnSumListRecalcAll: TNotifyEvent;
FHorzScrollBar: TDBGridEhScrollBar;
FVertScrollBar: TDBGridEhScrollBar;
FOptionsEh: TDBGridEhOptions;
FEditKeyValue: Variant; // For lookup fields and KeyList based column
ThumbTracked:Boolean;
FOnSortMarkingChanged: TNotifyEvent;
FSortMarking:Boolean;
FUpDownBitmap:TBitmap;
FTopLeftVisible:Boolean;
FSelection: TDBGridEhSelection;
FAutoDrag, FSelectedCellPressed:Boolean;
FHintControl: TPersistent;
FTitleImages: {$IFDEF EH_LIB_4}TCustomImageList{$ELSE}TImageList{$ENDIF};
FAllowedOperations: TDBGridEhAllowedOperations;
//\\\
function AcquireFocus: Boolean;
procedure DataChanged;
procedure EditingChanged;
function GetDataSource: TDataSource;
function GetFieldCount: Integer;
function GetFields(FieldIndex: Integer): TField;
function GetSelectedField: TField;
function GetSelectedIndex: Integer;
procedure InternalLayout;
procedure MoveCol(RawCol, Direction: Integer; Select:Boolean);
procedure ReadColumns(Reader: TReader);
procedure RecordChanged(Field: TField);
procedure SetIme;
procedure SetColumns(Value: TDBGridColumnsEh);
procedure SetDataSource(Value: TDataSource);
procedure SetOptions(Value: TDBGridOptions);
procedure SetSelectedField(Value: TField);
procedure SetSelectedIndex(Value: Integer);
procedure SetTitleFont(Value: TFont);
procedure TitleFontChanged(Sender: TObject);
procedure UpdateData;
procedure UpdateActive;
procedure UpdateIme;
procedure UpdateScrollBar;
procedure UpdateRowCount;
procedure WriteColumns(Writer: TWriter);
procedure CMExit(var Message: TMessage); message CM_EXIT;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CMParentFontChanged(var Message: TMessage); message CM_PARENTFONTCHANGED;
procedure CMDeferLayout(var Message); message cm_DeferLayout;
procedure CMDesignHitTest(var Msg: TCMDesignHitTest); message CM_DESIGNHITTEST;
procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMIMEStartComp(var Message: TMessage); message WM_IME_STARTCOMPOSITION;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SetFOCUS;
procedure WMKillFocus(var Message: TMessage); message WM_KillFocus;
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND; //tmp
procedure SetDrawMemoText(const Value: Boolean);
procedure SetSumList(const Value: TDBGridEhSumList);
procedure SetHorzScrollBar(const Value: TDBGridEhScrollBar);
procedure SetVertScrollBar(const Value: TDBGridEhScrollBar);
procedure SetOptionsEh(const Value: TDBGridEhOptions);
//ddd
procedure WMChar(var Message: TWMChar); message WM_CHAR;
procedure WMTimer(var Message: TMessage); message WM_TIMER;
procedure ClearSelection;
procedure DoSelection(Select: Boolean; Direction: Integer;
MaxDirection,RowOnly: Boolean);
function UpDownBitmap: TBitmap;
procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
procedure SetTitleImages(const Value: {$IFDEF EH_LIB_4}TCustomImageList{$ELSE}TImageList{$ENDIF});
//\\\
protected
FUpdateFields: Boolean;
FAcquireFocus: Boolean;
FUpdatingEditor: Boolean;
//ddd
FDBGridEhState: TDBGridEhState;
FTitleHeight: Integer;
FTitleLines: Integer;
FTitleHeightFull: Integer;
FMarginText:Boolean;
FVTitleMargin: Integer;
FHTitleMargin: Integer;
FUseMultiTitle: Boolean;
FAutoFitColWidths:Boolean;
FMinAutoFitWidth:Integer;
FInitColWidth:TList;
FFooterRowCount: Integer;
FOnDrawFooterCell:TDrawFooterCellEvent;
FHeadTree:THeadTreeNode;
FLeafFieldArr:PTLeafCol;
FNewRowHeight: Integer;
FRowLines: Integer;
FRowSizingAllowed : Boolean;
FDefaultRowChanged: Boolean;
FAllowWordWrap: Boolean; // True if RowHeight + 3 > TextHeight
FDrawMemoText: Boolean;
FSortMarkerImages:TImageList;
FPressedCol: Longint;
FPressed: Boolean;
FTracking: Boolean;
FSwapButtons: Boolean;
FOnCheckButton: TCheckTitleEhBtnEvent;
FOnGetBtnParams: TGetBtnEhParamsEvent;
FOnTitleBtnClick: TTitleEhClickEvent;
FInplaceEditorButtonWidth: Integer;
FFrozenCols: Integer;
FSumList:TDBGridEhSumList;
FVisibleColumns:TColumnsEhList;
FPressedCell:TGridCoord;
FIndicatorPressed:Boolean;
FDownMousePos: TPoint;
FMoveMousePos: TPoint;
FMouseShift:TShiftState;
FTimerActive:Boolean;
FTimerInterval:Integer;
FPresedRecord:TBookMarkStr;
FSelectionAnchorSelected:Boolean;
FAntiSelection:Boolean;
FDataTracking:Boolean;
FSortMarkedColumns:TColumnsEhList;
FLockPaint:Boolean;
FLockedBookmark:TBookmarkStr;
FLookedOffset:Integer;
//
procedure Paint;override; //
function GetFooterRowCount: Integer;
procedure SetFooterRowCount(Value: Integer);
procedure ClearPainted(node:THeadTreeNode);
function SetChildTreeHeight(ANode:THeadTreeNode):Integer;
function ReadTitleHeight: Integer;
procedure WriteTitleHeight(th: Integer);
function ReadTitleLines: Integer;
procedure WriteTitleLines(tl: Integer);
procedure WriteMarginText(IsMargin:Boolean);
procedure WriteVTitleMargin(Value: Integer);
procedure WritEhTitleMargin(Value: Integer);
procedure WriteUseMultiTitle(Value:Boolean);
procedure WriteAutoFitColWidths(Value:Boolean);
procedure WriteMinAutoFitWidth(Value:Integer);
function GetColWidths(Index: Longint): Integer;
procedure SetColWidths(Index: Longint; Value: Integer);
procedure SetRowSizingAllowed(Value:Boolean);
function GetRowHeight: Integer;
procedure SetRowHeight(Value: Integer);
function GetRowLines: Integer;
procedure SetRowLines(Value: Integer);
procedure RowHeightsChanged; override;
function StdDefaultRowHeight: Integer;
procedure StopTracking;
procedure TrackButton(X, Y: Integer);
procedure WMCancelMode(var Message: TMessage); message WM_CANCELMODE;
procedure CMCancelMode(var Message: TCMCancelMode); message CM_CancelMode;
procedure DoTitleClick(ACol: Longint; AColumn: TColumnEh); dynamic;
procedure CheckTitleButton(ACol: Longint; var Enabled: Boolean); dynamic;
procedure GetCellParams(Column: TColumnEh; AFont: TFont; var Background: TColor;
State: TGridDrawState ); dynamic;
procedure SetFrozenCols(Value: Integer);
procedure EnsureFooterValueType(AFooterValueType:TFooterValueType; AFieldName:String);
procedure SumListChanged(Sender: TObject);
procedure SumListRecalcAll(Sender: TObject);
procedure GetFooterParams(DataCol, Row: Longint; Column: TColumnEh; AFont: TFont;
var Background: TColor; var Alignment : TAlignment; State: TGridDrawState; var Text:String); dynamic;
function CanEditModifyText: Boolean;
function VisibleDataRowCount: Integer;
procedure TimerScroll;
procedure StopTimer;
procedure ResetTimer(Interval: Integer);
function DataRect:TRect;
procedure DoSortMarkingChanged; dynamic;
//\\\
function RawToDataColumn(ACol: Integer): Integer;
function DataToRawColumn(ACol: Integer): Integer;
function AcquireLayoutLock: Boolean;
procedure BeginLayout;
procedure BeginUpdate;
procedure CancelLayout;
function CanEditAcceptKey(Key: Char): Boolean; override;
function CanEditModify: Boolean; override;
function CanEditShow: Boolean; override;
procedure CellClick(Column: TColumnEh); dynamic;
procedure ColumnMoved(FromIndex, ToIndex: Longint); override;
procedure ColEnter; dynamic;
procedure ColExit; dynamic;
procedure ColWidthsChanged; override;
function CreateColumns: TDBGridColumnsEh; dynamic;
function CreateEditor: TInplaceEdit; override;
procedure CreateWnd; override;
procedure DeferLayout;
procedure WndProc(var Message: TMessage); override;
procedure DefineFieldMap; virtual;
procedure DefineProperties(Filer: TFiler); override;
procedure TopLeftChanged; override;
//ddd
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
//\\\
procedure DrawDataCell(const Rect: TRect; Field: TField;
State: TGridDrawState); dynamic; { obsolete }
procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
Column: TColumnEh; State: TGridDrawState); dynamic;
procedure EditButtonClick; dynamic;
procedure EndLayout;
procedure EndUpdate;
function GetColField(DataCol: Integer): TField;
function GetEditLimit: Integer; override;
function GetEditMask(ACol, ARow: Longint): string; override;
function GetEditText(ACol, ARow: Longint): string; override;
function GetFieldValue(ACol: Integer): string;
function HighlightCell(DataCol, DataRow: Integer; const Value: string;
var AState: TGridDrawState): Boolean; virtual;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure LayoutChanged; virtual;
procedure LinkActive(Value: Boolean); virtual;
procedure Loaded; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
//ddd
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
//\\\
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
{$IFDEF EH_LIB_4}
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
{$ENDIF}
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure Scroll(Distance: Integer); virtual;
procedure SetColumnAttributes; virtual;
procedure SetEditText(ACol, ARow: Longint; const Value: string); override;
function StoreColumns: Boolean;
procedure TimedScroll(Direction: TGridScrollDirection); override;
procedure TitleClick(Column: TColumnEh); dynamic;
property Columns: TDBGridColumnsEh read FColumns write SetColumns;
property DefaultDrawing: Boolean read FDefaultDrawing write FDefaultDrawing default True;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property DataLink: TGridDataLinkEh read FDataLink;
//ddd property IndicatorOffset: Byte read FIndicatorOffset;
property LayoutLock: Byte read FLayoutLock;
property Options: TDBGridOptions read FOptions write SetOptions
default [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines,
dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit];
property ParentColor default False;
property ReadOnly: Boolean read FReadOnly write FReadOnly default False;
property SelectedRows: TBookmarkListEh read FBookmarks;
property TitleFont: TFont read FTitleFont write SetTitleFont;
property UpdateLock: Byte read FUpdateLock;
property OnColEnter: TNotifyEvent read FOnColEnter write FOnColEnter;
property OnColExit: TNotifyEvent read FOnColExit write FOnColExit;
property OnDrawDataCell: TDrawDataCellEvent read FOnDrawDataCell
write FOnDrawDataCell; { obsolete }
property OnDrawColumnCell: TDrawColumnEhCellEvent read FOnDrawColumnCell
write FOnDrawColumnCell;
property OnEditButtonClick: TNotifyEvent read FOnEditButtonClick
write FOnEditButtonClick;
property OnColumnMoved: TMovedEvent read FOnColumnMoved write FOnColumnMoved;
property OnCellClick: TDBGridEhClickEvent read FOnCellClick write FOnCellClick;
property OnTitleClick: TDBGridEhClickEvent read FOnTitleClick write FOnTitleClick;
//ddd
procedure SaveColumnsLayoutProducer(ARegIni: TObject; Section: String; DeleteSection: Boolean);
procedure RestoreColumnsLayoutProducer(ARegIni: TObject; Section: String; RestoreParams:TColumnEhRestoreParams);
procedure SaveGridLayoutProducer(ARegIni: TObject; Section: String; DeleteSection: Boolean);
procedure RestoreGridLayoutProducer(ARegIni: TObject; Section: String; RestoreParams:TDBGridEhRestoreParams);
function AllowedOperationUpdate:Boolean;
//\\\
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DefaultDrawDataCell(const Rect: TRect; Field: TField;
State: TGridDrawState); { obsolete }
procedure DefaultDrawColumnCell(const Rect: TRect; DataCol: Integer;
Column: TColumnEh; State: TGridDrawState);
function ValidFieldIndex(FieldIndex: Integer): Boolean;
property HeadTree: THeadTreeNode read FHeadTree;
property LeafFieldArr: PTLeafCol read FLeafFieldArr;
property EditorMode;
property FieldCount: Integer read GetFieldCount;
property Fields[FieldIndex: Integer]: TField read GetFields;
property SelectedField: TField read GetSelectedField write SetSelectedField;
property SelectedIndex: Integer read GetSelectedIndex write SetSelectedIndex;
//ddd
{$IFDEF Eh_LIB_4} {Borland Delphi 4.0 or C++ Builder 4.0}
function ExecuteAction(Action: TBasicAction): Boolean; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
{$ENDIF}
procedure DefaultHandler(var Msg); override;
procedure InvalidateFooter;
procedure SaveColumnsLayout(ARegIni: TRegIniFile);
procedure RestoreColumnsLayout(ARegIni: TRegIniFile; RestoreParams:TColumnEhRestoreParams);
procedure SaveColumnsLayoutIni(IniFileName: String; Section: String; DeleteSection: Boolean);
procedure RestoreColumnsLayoutIni(IniFileName: String; Section: String; RestoreParams:TColumnEhRestoreParams);
procedure SaveGridLayout(ARegIni: TRegIniFile);
procedure RestoreGridLayout(ARegIni: TRegIniFile; RestoreParams:TDBGridEhRestoreParams);
procedure SaveGridLayoutIni(IniFileName: String; Section: String; DeleteSection: Boolean);
procedure RestoreGridLayoutIni(IniFileName: String; Section: String; RestoreParams:TDBGridEhRestoreParams);
function CellRect(ACol, ARow: Longint): TRect;
procedure DefaultDrawFooterCell(const Rect: TRect; DataCol, Row: Integer;
Column: TColumnEh; State: TGridDrawState);
function GetFooterValue(Row: Integer; Column: TColumnEh): String; virtual;
procedure SetSortMarkedColumns;
procedure SaveBookmark;
procedure RestoreBookmark;
property Canvas;
property Col;
property InplaceEditor;
property LeftCol;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -