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

📄 easygrid_0811.pas

📁 delphi制作表格的控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
    procedure WMPaste(var Message); message WM_PASTE;
    procedure WMCut(var Message); message WM_CUT;
    procedure WMClear(var Message); message WM_CLEAR;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure DblClick; override;
    function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
      MousePos: TPoint): Boolean; override;
    function EditCanModify: Boolean; override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure KeyPress(var Key: Char); override;
    procedure KeyUp(var Key: Word; Shift: TShiftState); override;
    procedure ValidateError; override;
    procedure BoundsChanged; virtual;
    procedure UpdateContents; virtual;
    procedure WndProc(var Message: TMessage); override;
  public
    constructor Create(AOwner: TComponent); override;
    procedure Deselect;
    procedure Hide;
    procedure Invalidate; reintroduce;
    procedure Move(const Loc: TRect);
    function PosEqual(const Rect: TRect): Boolean;
    procedure SetFocus; reintroduce;
    procedure UpdateLoc(const Loc: TRect);
    function Visible: Boolean;
    property ParentGrid: TCustomEasyGrid read FGrid write FGrid;
    property Grid: TCustomEasyGrid read FGrid;
    property Cell: PCellInfo read FCell write FCell;
  end;

  TPopupListbox = class(TCustomListbox)
  private
    FSearchText: String;
    FSearchTickCount: Longint;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWnd; override;
    procedure KeyPress(var Key: Char); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  end;

  TOnGetPickListItems = procedure(ACol, ARow: Integer; Items: TStrings) of Object;

  TInplaceEditList = class(TInPlaceEdit)
  private
    FButtonWidth: Integer;
    FPickList: TCustomListbox;
    FActiveList: TWinControl;
    FEditStyle: TEditStyle;
    FDropDownRows: Integer;
    FListVisible: Boolean;
    FTracking: Boolean;
    FPressed: Boolean;
    FPickListLoaded: Boolean;
    FOnGetPickListitems: TOnGetPickListItems;
    FOnEditButtonClick: TNotifyEvent;
    function GetPickList: TCustomListbox;
    procedure CMCancelMode(var Message: TCMCancelMode); message CM_CancelMode;
    procedure WMCancelMode(var Message: TMessage); message WM_CancelMode;
    procedure WMKillFocus(var Message: TMessage); message WM_KillFocus;
    procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message wm_LButtonDblClk;
    procedure WMPaint(var Message: TWMPaint); message wm_Paint;
    procedure WMSetCursor(var Message: TWMSetCursor); message WM_SetCursor;
  protected
    procedure BoundsChanged; override;
    function ButtonRect: TRect;
    procedure CloseUp(Accept: Boolean); dynamic;
    procedure DblClick; override;
    procedure DoDropDownKeys(var Key: Word; Shift: TShiftState); virtual;
    procedure DoEditButtonClick; virtual;
    procedure DoGetPickListItems; dynamic;
    procedure DropDown; dynamic;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure ListMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    function OverButton(const P: TPoint): Boolean;
    procedure PaintWindow(DC: HDC); override;
    procedure StopTracking;
    procedure TrackButton(X,Y: Integer);
    procedure UpdateContents; override;
    procedure WndProc(var Message: TMessage); override;
  public
    constructor Create(Owner: TComponent); override;
    procedure RestoreContents;
    property ActiveList: TWinControl read FActiveList write FActiveList;
    property ButtonWidth: Integer read FButtonWidth write FButtonWidth;
    property DropDownRows: Integer read FDropDownRows write FDropDownRows;
    property EditStyle: TEditStyle read FEditStyle;
    property ListVisible: Boolean read FListVisible write FListVisible;
    property PickList: TCustomListbox read GetPickList;
    property PickListLoaded: Boolean read FPickListLoaded write FPickListLoaded;
    property Pressed: Boolean read FPressed;
    property OnEditButtonClick: TNotifyEvent read FOnEditButtonClick
      write FOnEditButtonClick;
    property OnGetPickListitems: TOnGetPickListItems read FOnGetPickListitems
      write FOnGetPickListitems;
  end;

  TInplaceDBEdit = class(TInplaceEditList)
  private
    FDataList: TDBLookupListBox;
    FUseDataList: Boolean;
    FLookupSource: TDatasource;
  protected
    procedure CloseUp(Accept: Boolean); override;
    procedure DoEditButtonClick; override;
    procedure DropDown; override;
    procedure UpdateContents; override;
  public
    constructor Create(Owner: TComponent); override;
    property    DataList: TDBLookupListBox read FDataList;
  end;

  TEasyGridDataLink = class(TDataLink)
  private
    FGrid: TCustomEasyGrid;
    FFieldCount: Integer;
    FFieldMap: array of Integer;
    FModified: Boolean;
    FDataChanged: Boolean;
    FInUpdateData: Boolean;
    FSparseMap: Boolean;
    function GetDefaultFields: Boolean;
    function GetFields(I: Integer): TField;
  protected
    procedure ActiveChanged; override;
    procedure DataEvent(Event: TDataEvent; Info: Longint);override;
    procedure BuildAggMap;
    procedure DataSetChanged; override;
    procedure DataSetScrolled(Distance: Integer); override;
    procedure FocusControl(Field: TFieldRef); override;
    procedure EditingChanged; override;
    function  IsAggRow(Value: Integer): Boolean; virtual;

    procedure RecordChanged(Field: TField); override;
    procedure UpdateData; override;
    function  GetMappedIndex(ColIndex: Integer): Integer;
  public
    constructor Create(AGrid: TCustomEasyGrid);
    destructor  Destroy; override;
    //function  AddMapping(const FieldName: string): Boolean;
    procedure ClearMapping;
    procedure Modified;
    procedure Reset;
    property  DefaultFields: Boolean read GetDefaultFields;
    property  FieldCount: Integer read FFieldCount;
    property  Fields[I: Integer]: TField read GetFields;
    property  SparseMap: Boolean read FSparseMap write FSparseMap;
    property  Grid: TCustomEasyGrid read FGrid;
  end;

  TDrawDBGrid = class(TDBGrid)
  private
     FCellCol,FCellRow:Integer;
  protected
     procedure Paint; override;
     procedure CMDesignHitTest(var Message:TCMDesignHitTest);message CM_DESIGNHITTEST;

  public

  published
     property CellCol:Integer read FCellCol write FCellCol;
     property CellRow:Integer read FCellRow write FCellRow;
     //property Columns;
  end;

  TRunMode = (rmDesignMode,rmLinkDataSet,rmPrint);

  TCustomEasyGrid = class(TCustomControl)
  private
    FRunMode:TRunMode;   //  add  by liuzhigang in 2004.07.29
    FDatalink:TEasyGridDataLink;
    FDBGridsCount:Integer;
    //FSelectedField:TField;
//---------------------------------------------------
    FAnchor: TGridCoord;            // 鼠标释放坐标
    FSelStart, FSelEnd: TGridCoord; // 选择区域起止坐标
    FBorderStyle: TBorderStyle;     // 边框风格
    FCanEditModify: Boolean;
    FColCount: Longint;
    FColWidths: Pointer;
    FTabStops: Pointer;
    FColCanSizes: Pointer;
    FRowCanSizes: Pointer;
    FCurrent: TGridCoord;            // 当前网格坐标
    FDefaultColWidth: Integer;
    FDefaultRowHeight: Integer;
    FFixedCols: Integer;
    FFixedRows: Integer;
    FFixedLineColor: TColor;         // 固定区线条颜色
    FClientLineColor: TColor;        // 活动区线条颜色
    FGridLineWidth: Integer;
    FOptions: TEasyGridOptions;
    FRowCount: Longint;
    FRowHeights: Pointer;
    FScrollBars: TScrollStyle;
    FTopLeft: TGridCoord;             // 当前左上角网格坐标
    FSizingIndex: Longint;            // 被 Sizing 的行(列)号
    FSizingPos, FSizingOfs: Integer;  // Sizing前鼠标位置与偏移量
    FHitTest: TPoint;                 // 鼠标点击位置
    FInplaceEdit: TInplaceEdit;
    //FDBGrid: TDrawDBGrid;
    FListDBGrid:TList;
//----------------------------------------------------
    FInplaceCol, FInplaceRow: Longint;// InplaceEditor 所在行列( -1 隐藏)
    FColOffset: Integer;              // 只有一个活动列时,该列左边被隐藏部分的宽度
    FDefaultDrawing: Boolean;
    FEditorMode: Boolean;             // InplaceEditor 是否可见
    FEditText:String;

    //User Define
    FCells: TCells;                   // TList(TList1,TList2,...)
    FShowColTitle: Boolean;           // 是否显示行列标题
    FShowRowTitle: Boolean;
    FTitleColor: TColor;              // 标题栏颜色
    FHighLightColor: TColor;          // 高亮度背景颜色
    FHighLightTextColor: TColor;      // 高亮度文本颜色
    FFocusedTitleColor: TColor;       // 当前标题栏文本颜色

    FDataStyle : TDataStyle;
    FAlignMode : TAlignMode;
    FShowForeText : Boolean;
    FReadOnly : Boolean;
    FCellLock : Boolean;
    FAutoWordBreak : Boolean;
    FCellLineWidth : Integer;
    FCellPenStyle : TPenStyle;
    FAllowNegative : Boolean;
    FTrailingZero : Boolean;
    FZeroNull : Boolean;
    FThousandSep : Boolean;
    FMaxLength : Integer;
    FIntLength : Integer;
    FDecLength : Integer;
    FColor : TColor;

    FFontName  : string;
    FFontSize  : Integer;
    FFontColor : TColor;
    FFontStyle : TFontStyles;

    FEditUpdate: Integer;
    FAlwaysDrawFocus: Boolean;        // 是否总是显示粗焦点框
    FClientSizeable: Boolean;         // 活动区域能否 Size
    FCopyMoveRect: TGridRect;         // CopyMove 的范围
    FCopyMoveCell: TGridCoord;        // CopyMove 开始 Cell
    FCopyMoveOffset: TGridCoord;      // CopyMove 偏移量
    FFillStyle: TFillStyle;           // Fill 的方式
    FFillRect: TGridRect;             // Fill 的范围
    FFillCell: TGridCoord;            // Fill 开始 Cell
    FFillOffset: TGridCoord;          // Fill 偏移量

    FGridCanCopyMove: Boolean;        // 网格是否可以拖动
    FGridCanFill: Boolean;            // 网格是否可以填充
    FShowPopup: Boolean;              // 是否显示右键菜单
    FAutoUpdate: Boolean;             // 修改数据时是否自动更新
    FCellPropPageIndex: Integer;      // 属性设置窗口的页号
    FPageSetupPageIndex: Integer;     // 页面设置窗口的页号
    FPreviewZoomIndex: Integer;       // 预览窗口的缩放比例编号

    // *************************************************************************
    NewRgn, OldRgn: HRGN;             // 剪裁区域
    HaveClip: Integer;                // 剪裁标志
    MainBuffer: array of Char;        // 剪贴缓冲区
    // *************************************************************************

    FOnDrawCell: TDrawCellEvent;
    FOnGetEditMask: TGetEditEvent;
    FOnGetEditText: TGetEditEvent;
    FOnSelectCell: TSelectCellEvent;
    FOnSetEditText: TSetEditEvent;
    FOnHideEdit: TSetEditEvent;
    FOnSetForeText: TSetCellTextEvent;
    FOnSetBackText: TSetCellTextEvent;
    FBeforeSetCellProp: TBeforeSetCellPropEvent;
    FAfterSetCellProp: TAfterSetCellPropEvent;
    FOnTopLeftChanged: TNotifyEvent;
    FOnInsertCol: TInsertColEvent;
    FOnInsertRow: TInsertRowEvent;
    FOnDeleteCol: TDeleteColEvent;
    FOnDeleteRow: TDeleteRowEvent;
    FOnInsertCellRight: TInsertCellRightEvent;
    FOnInsertCellDown: TInsertCellDownEvent;
    FOnDeleteCellRight: TDeleteCellRightEvent;
    FOnDeleteCellDown: TDeleteCellDownEvent;
    FOnPasteCells: TPasteCellsEvent;
    FOnCutCells: TCutCellsEvent;
    FOnCopyMoveCells: TCopyMoveCellsEvent;
    FOnFillCells: TFillCellsEvent;

⌨️ 快捷键说明

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