⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbgrideh.pas

📁 Dbgrid 增强(附源码):支持多表头,多固定列,按表头排序,支持合计列,并支持直接打印
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    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 + -