📄 easygrid_0811.pas
字号:
// 转换屏幕绝对坐标到 Cell 坐标
function CalcCoordFromPoint(X, Y: Integer;
const DrawInfo: TEasyGridDrawInfo): TGridCoord;
// 计算 DrawInfo 数据结构(调用 CalcDrawInfoXY )
procedure CalcDrawInfo(var DrawInfo: TEasyGridDrawInfo);
// 计算 DrawInfo 数据结构
procedure CalcDrawInfoXY(var DrawInfo: TEasyGridDrawInfo;
UseWidth, UseHeight: Integer);
// 计算固定行(列)信息
procedure CalcFixedInfo(var DrawInfo: TEasyGridDrawInfo);
// 计算页面绘画信息
procedure CalcPageDrawInfo(var APageDrawInfoList: TPageDrawInfoList);
// 计算对应某一 Cell 最大的 TopLeft 值(Fixed 区外)
function CalcMaxTopLeft(const Coord: TGridCoord;
const DrawInfo: TEasyGridDrawInfo): TGridCoord;
// 计算新的选择范围
function CalcMaxRange(StartCell, EnteredCell: TGridCoord) : TGridRect;
// 恢复 Grid 模式到 gsNormal
procedure CancelMode;
// 判断能否画 Sizing 线
function CanDrawSizingLine(AAxisDrawInfo:TEasyGridAxisDrawInfo;
SizingPos: Integer; State: TEasyGridState): Boolean;
// 修改 Grid 行列个数
procedure ChangeSize(NewColCount, NewRowCount: Longint);
// 把当前选中的 Cell 完全放入视口中
procedure ClampInView(const Coord: TGridCoord; IsMouseMove: Boolean);
// 画 Sizing 虚线
procedure DrawSizingLine(const DrawInfo: TEasyGridDrawInfo);
// 画 CopyMove 虚框
procedure DrawCopyMoveRect(const DrawInfo: TEasyGridDrawInfo);
// 画 Fill 虚框
procedure DrawFillRect(const DrawInfo: TEasyGridDrawInfo);
// 使某个 Cell 成为当前 Cell
function FocusCell(ACol, ARow: Longint; MoveAnchor: Boolean):Boolean;
// 转换 Grid 坐标到 Screen 坐标
procedure GridRectToScreenRect(GridRect: TGridRect;
var ScreenRect: TRect; IncludeLine: Boolean);
// 保存 InplaceEditor 的值并隐藏之
procedure HideEdit;
// 修改 TopLeft 值并更新滚动条位置
procedure ModifyScrollBar(ScrollBar, ScrollCode, Pos: Cardinal;
UseRightToLeft: Boolean);
// 移动 Anchor
procedure MoveAnchor(const NewAnchor: TGridCoord; MoveSel: Boolean = True);
// 将当前 Cell 焦点移动到新的位置
function MoveCurrent(ACol, ARow: Longint; MoveAnchor, Show, TopLeftChange: Boolean):Boolean;
// 设置新的 TopLeft
procedure MoveTopLeft(ALeft, ATop: Longint);
// 立即刷新第 Index 列右边的所有区域(列宽改变时被调用)
procedure ResizeCol(Index: Longint; OldSize, NewSize: Integer);
// 立即刷新第 Index 行下面的所有区域(行高改变时被调用)
procedure ResizeRow(Index: Longint; OldSize, NewSize: Integer);
// 选择区域移动后(拖动边框),重绘非重叠区域
procedure SelectionMoved(OldSel: TGridRect);
// 平滑滚动窗体
procedure ScrollDataInfo(DX, DY: Integer; var DrawInfo: TEasyGridDrawInfo);
// 在 TopLeft 改变后对窗体进行平滑滚动,必要时刷新整个客户区
procedure TopLeftMoved(const OldTopLeft: TGridCoord);
// 修改滚动条位置
procedure UpdateScrollPos;
// 修改滚动条范围
procedure UpdateScrollRange;
// 判断滚动条是否可见
function ScrollBarVisible(Code: Word): Boolean;
{function GetCellProperty(I,J:Integer): PCellInfo;
Procedure SetCellProperty(I,J:Integer);}
// 取得列宽( Index 从 1 开始)
function GetColWidths(Index: Longint): Integer;
// 取得行高( Index 从 1 开始)
function GetRowHeights(Index: Longint): Integer;
// 取得选择区域(Grid 坐标)
function GetSelection: TGridRect;
// 取得 ColCanSizes ( Index 从 1 开始)
function GetColCanSizes(Index: Longint): Boolean;
// 取得 RowCanSizes ( Index 从 1 开始)
function GetRowCanSizes(Index: Longint): Boolean;
// 取得 TabStop ( Index 从 1 开始)
function GetTabStops(Index: Longint): Boolean;
// 取得可完整显示的非固定列数 ( Index 从 1 开始)
function GetVisibleColCount: Integer;
// 取得可完整显示的非固定行数 ( Index 从 1 开始)
function GetVisibleRowCount: Integer;
// 判断 Grid 是否为当前的活动控件(拥有焦点)
function IsActiveControl: Boolean;
function GetCellField(ACol,ARow:Integer): TField;
procedure ReadColWidths(Reader: TReader);
procedure ReadRowHeights(Reader: TReader);
// 设置 BorderStyle 后重新创建控件窗口
procedure SetBorderStyle(Value: TBorderStyle);
// 设置当前 Cell 列坐标,产生 Click 事件
procedure SetCol(Value: Longint);
// 设置列数
procedure SetColCount(Value: Longint);
// 设置列宽并刷新 Index 列右边的窗口部分
procedure SetColWidths(Index: Longint; Value: Integer);
// 设置缺省列宽并刷新整个窗口
procedure SetDefaultColWidth(Value: Integer);
// 设置缺省行高并刷新整个窗口
procedure SetDefaultRowHeight(Value: Integer);
// 隐藏/显示 InplaceEditor
procedure SetEditorMode(Value: Boolean);
// 设置固定行(列)颜色并刷新窗口
procedure SetFixedLineColor(Value: TColor);
// 设置固定行(列)颜色并刷新窗口
procedure SetClientLineColor(Value: TColor);
// 设置标题栏颜色并刷新窗口
procedure SetTitleColor(Value: TColor);
// 设置高亮度背景颜色并刷新窗口
procedure SetHighLightColor(Value: TColor);
// 设置高亮度文本颜色并刷新窗口
procedure SetHighLightTextColor(Value: TColor);
// 设置焦点标题文本颜色并刷新窗口
procedure SetFocusedTitleColor(Value: TColor);
// 设置固定列个数并刷新窗口
procedure SetFixedCols(Value: Integer);
// 设置固定行个数并刷新窗口
procedure SetFixedRows(Value: Integer);
// 设置线宽并刷新窗口
procedure SetGridLineWidth(Value: Integer);
// 设置当前左上角网格列坐标
procedure SetLeftCol(Value: Longint);
// 设置 GridOptions
procedure SetOptions(Value: TEasyGridOptions);
// 设置当前 Cell 行坐标,产生 Click 事件
procedure SetRow(Value: Longint);
// 设置行数
procedure SetRowCount(Value: Longint);
// 设置行高并刷新 Index 行下面的窗口部分
procedure SetRowHeights(Index: Longint; Value: Integer);
// 设置 Grid 滚动条类型
procedure SetScrollBars(Value: TScrollStyle);
// 设置选择区域
procedure SetSelection(Value: TGridRect);
// 设置 ColCanSizes 数组
procedure SetColCanSizes(Index: Longint; Value: Boolean);
// 设置 RowCanSizes 数组
procedure SetRowCanSizes(Index: Longint; Value: Boolean);
// 设置 TabStops 数组
procedure SetTabStops(Index: Longint; Value: Boolean);
// 设置当前左上角网格行坐标
procedure SetTopRow(Value: Longint);
// 决定是否显示当前网格的 Editor
procedure UpdateEdit;
// 调用 SetEditText 向 Cell 回传 Editor 的内容
procedure UpdateText;
procedure InitializeGrid;
procedure DisableEditUpdate;
procedure EnableEditUpdate;
procedure WriteColWidths(Writer: TWriter);
procedure WriteRowHeights(Writer: TWriter);
procedure ReadCellProp(Stream: TStream);
procedure WriteCellProp(Stream: TStream);
procedure ReadDBGrids(Reader: TReader);
procedure WriteDBGrids(Writer: TWriter);
procedure ReadDBGridsCount(Reader: TReader);
procedure WriteDBGridsCount(Writer: TWriter);
procedure SetDataSource(Value: TDataSource);
function GetDataSource: TDataSource;
procedure DataSetChanged;
procedure UpdateData;
procedure RecordChanged(Field: TField);
function GetEditStyle(ACol, ARow: Longint): TEditStyle;
procedure CMCancelMode(var Msg: TMessage); message CM_CANCELMODE;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
procedure CMDesignHitTest(var Msg: TCMDesignHitTest); message CM_DESIGNHITTEST;
procedure CMWantSpecialKey(var Msg: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
procedure WMChar(var Msg: TWMChar); message WM_CHAR;
procedure WMCancelMode(var Msg: TWMCancelMode); message WM_CANCELMODE;
procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
procedure WMEraseBkGnd(var Message: TWMCommand); message WM_ERASEBKGND;
procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS;
procedure WMLButtonDown(var Message: TMessage); message WM_LBUTTONDOWN;
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;
procedure WMSetFocus(var Msg: TWMSetFocus); message WM_SETFOCUS;
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
procedure WMTimer(var Msg: TWMTimer); message WM_TIMER;
procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
function MouseCoord(X, Y: Integer): TGridCoord;
procedure SetAutoUpdate(Value: Boolean);
procedure DrawLine(ACanvas: TCanvas; X1, Y1, X2, Y2: Integer);
function GetColors(ACol, ARow: Integer): TColor;
procedure SetColors(ACol, ARow: Integer; Value: TColor);
function GetMerges(ACol, ARow: Integer): PGridRect;
procedure SetColTitle(Value: Boolean);
procedure SetRowTitle(Value: Boolean);
function GetAlignMode(ACol, ARow: Integer): TAlignMode;
procedure SetAlignMode(ACol, ARow: Integer; AlignMode: TAlignMode);
function GetForeText(ACol, ARow: Integer): string;
procedure SetForeText(ACol, ARow: Integer; Value: string);
function GetBackText(ACol, ARow: Integer): string;
procedure SetBackText(ACol, ARow: Integer; Value: string);
procedure SetCellDataStyle(Value: TDataStyle);
procedure SetCellAlignMode(Value: TAlignMode);
procedure SetCellShowForeText(Value: Boolean);
procedure SetCellLock(Value: Boolean);
procedure SetCellReadOnly(Value: Boolean);
procedure SetCellAutoWordBreak(Value: Boolean);
procedure SetCellLineWidth(Value: Integer);
procedure SetCellPenStyle(Value: TPenStyle);
procedure SetCellAllowNegative(Value: Boolean);
procedure SetCellTrailingZero(Value: Boolean);
procedure SetCellZeroNull(Value: Boolean);
procedure SetCellThousandSep(Value: Boolean);
procedure SetCellMaxLength(Value: Integer);
procedure SetCellIntLength(Value: Integer);
procedure SetCellDecLength(Value: Integer);
procedure SetCellColor(Value: TColor);
procedure SetCellFontSize(Value: Integer);
procedure SetCellFontColor(Value: TColor);
procedure SetCellFontStyle(Value: TFontStyles);
procedure SetRunMode(Value: TRunMode);
function RegularRange(ASel: TGridRect) : Boolean;
// 判断一个范围内是否包含有合并区域
function HaveMerge(ARect: PGridRect): Boolean;
// 判断一个 Cell 是否处在合并区域内
function CellInMerge(ACol, ARow: Integer): Boolean;
// 判断目标区域是否与已有合并区域冲突
function MergeRectIntersects(DestRect: TGridRect): Boolean;
// 判断目标区域是否含有只读单元格
function RectReadOnly(DestRect: TGridRect): Boolean;
// 判断能否 CopyMove 到目标区域
function CanCopyMove: Boolean;
// 判断能否 Fill 目标区域
function CanFill(SrcRect: TRect; Offset: Integer; FillStyle: TFillStyle): Boolean;
// 判断能否 Paste 到目标区域
function CanPaste(DestRect: TGridRect): Boolean;
// 计算扩展状态( Copying, Filling, Moving )
procedure CalcExtendedState(X, Y: Integer; var State: TEasyGridState;
DrawInfo: TEasyGridDrawInfo);
// 计算 ColSizing, RowSizing 状态
procedure CalcSizingState(X, Y: Integer; var State: TEasyGridState;
var Index: Longint; var SizingPos, SizingOfs: Integer;
var DrawInfo: TEasyGridDrawInfo); virtual;
// 计算 Cell 内容实际占用的空间(按剪贴板格式)
function CalcCellSize(ACell: PCellInfo): Integer;
// 得到剪贴板中数据的起始坐标与宽高
procedure GetClipBoardInfo(var StartCoord, Size: TGridCoord);
// 从缓冲区中(字符流)读出一个 Cell 内容(按剪贴板格式)
procedure ReadCellFromBuffer(SrcBuffer: PCharArray; DestCell: PCellInfo);
// 把一个 Cell 内容写到缓冲区中(字符流)(按剪贴板格式)
procedure WriteCellToBuffer(SrcCell: PCellInfo; DestBuffer: PCharArray);
// 拷贝一个范围内的 Cells 内容到缓冲区中(按剪贴板格式)
procedure CopyCellsToBuffer(Range: TGridRect);
// 从缓冲区中粘贴 Cells 内容
procedure PasteCellsFromBuffer(DestRect: TGridRect);
// 清除剪贴板缓冲区
procedure ClearClipBoardBuffer;
// 把一个 Cell 恢复到缺省状态
procedure InitCell(AGrid:TCustomEasyGrid;ACell:PCellInfo;ACol,ARow:Integer);
procedure InitPopupMenu;
procedure MenuItemClick(Sender: TObject);
procedure SetClipRect(ACanvas: TCanvas; ClipR: TRect);
procedure RestoreClipRect(ACanvas: TCanvas);
procedure ColCountChange(Value: Integer);
procedure RowCountChange(Value: Integer);
function FindNextVisibleCell(Start: Integer; AAxisDrawInfo: TEasyGridAxisDrawInfo): Integer;
function FindLastVisibleCell(Start: Integer; AAxisDrawInfo: TEasyGridAxisDrawInfo): Integer;
function FindDataSource(Value:String):TDataSource;
//procedure CMInvalidate(var Message: TMessage); message CM_INVALIDATE;
protected
FGridState: TEasyGridState; // Grid 当前所处的状态
FSaveCellExtents: Boolean;
DesignOptionsBoost: TEasyGridOptions;
VirtualView: Boolean;
procedure Loaded;override;
function CreateDBGrid: TDrawDBGrid;
function CreateEditor: TInplaceEdit; virtual;
procedure CreateParams(var Params: TCreateParams); override;
// 取得网格信息(地址)
function GetCell(ACol, ARow: Integer): PCellInfo;
function GetDrawDBGrid(ACol, ARow: Integer):TDrawDBGrid;
function GetDBGridsCount:Integer;
// 处理键盘按下
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
// 处理键盘松开
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
// 处理回车键显示或隐藏 InplaceEditor
procedure KeyPress(var Key: Char); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -