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

📄 dbgrideh.pas

📁 很COOL的GRID控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    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;

//Dennis Added Event Type
  TSetEditEventEH = procedure (Sender: TObject; ACol, ARow: Longint; Const Value: string) of object;


  TGetConfirmTextEvent = procedure (Sender:TObject;var Text:String)of object;
//Dennis Added end

  TCustomDBGridEh = class(TCustomGridEh)
  private
//  Dennis Added Event & property  begin

    FOnGetEditText: TGetEditEvent;
    FOnSetEditText: TSetEditEventEH;
    FOnTopLeftChanged: TNotifyEvent;
    FOnGetConfirmText:TGetConfirmTextEvent;


//  Dennis Added Event & property  end
    FIndicators: TImageList;
    FTitleFont: TFont;
    FReadOnly: Boolean;
    FOriginalImeName: TImeName;
    FOriginalImeMode: TImeMode;
    FUserChange: Boolean;
    FLayoutFromDataset: Boolean;
    FOptions: TDBGridOptions;
    FTitleOffset, FIndicatorOffset: Byte;
    FUpdateLock: Byte;
    FLayoutLock: Byte;
    FInColExit: Boolean;
    FDefaultDrawing: Boolean;
    FSelfChangingTitleFont: Boolean;
    FSelecting: Boolean;
    FSelRow: Integer;
    FDataLink: TGridDataLinkEh;
    FOnColEnter: TNotifyEvent;
    FOnColExit: TNotifyEvent;
    FOnDrawDataCell: TDrawDataCellEvent;
    FOnDrawColumnCell: TDrawColumnEhCellEvent;
    FEditText: string;
    FColumns: TDBGridColumnsEh;
    FOnEditButtonClick: TNotifyEvent;
    FOnColumnMoved: TMovedEvent;
    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;
//    FHintCell: TGridCoord;
    FTitleImages: {$IFDEF EH_LIB_4}TCustomImageList{$ELSE}TImageList{$ENDIF};
    FAllowedOperations: TDBGridEhAllowedOperations;
    FSizingIndex: Longint;
    FSizingPos, FSizingOfs: Integer;
    FSelfChangingFooterFont: Boolean;
    FFooterFont: TFont;
    FFooterColor: TColor;
    FHintFont:TFont;
    //\\\
    //由茶壶 Dennis Dennis加入
    FCurrencyStyle: TMoneyStyle;
    FHasCurrency: Boolean;
    FDrawCurrency: Boolean;

    //茶壶 Dennis Dennis加入完
    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;
    {$IFDEF EH_LIB_4}
    procedure CMHintsShowPause(var Message: TCMHintShowPause); message CM_HINTSHOWPAUSE;
    {$ENDIF}
    procedure CMParentColorChanged(var Message: TMessage); message CM_PARENTCOLORCHANGED;
    procedure SetTitleImages(const Value: {$IFDEF EH_LIB_4}TCustomImageList{$ELSE}TImageList{$ENDIF});
    function  GetCol: Longint;
    procedure SetCol(Value: Longint);
    procedure SetFooterFont(Value: TFont);
    procedure FooterFontChanged(Sender: TObject);
    procedure SetFooterColor(Value: TColor);
        procedure SetDrawCurrency(Value: Boolean);
        function GetDrawCurrency: Boolean;
        procedure SetCurrencyStyle(Value: TMoneyStyle);
        function GetCurrencyStyle: TMoneyStyle;
    //\\\
  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;
//    FFrozenFocuse:Boolean;
    FFrozenCol:Integer;
    FLockEditShow:Boolean;
    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);
    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: TInplaceEditEh; 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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -