📄 rxdbctrl.pas
字号:
{*******************************************************}
{ }
{ Delphi VCL Extensions (RX) }
{ }
{ Copyright (c) 1995, 1996 AO ROSNO }
{ Copyright (c) 1997, 1998 Master-Bank }
{ }
{ Patched by Polaris Software }
{*******************************************************}
unit RXDBCtrl;
{$I RX.INC}
{$R-}
interface
uses
Windows, Registry,
Messages, Classes, Controls, Forms, Grids, Graphics, Buttons, Menus,
StdCtrls, Mask, IniFiles, rxToolEdit, DB, DBGrids,
{$IFNDEF RX_D3} DBTables, {$ENDIF}
rxPlacemnt, rxDateUtil, DBCtrls, RxCtrls, rxCurrEdit;
{ TRxDBGrid }
const
DefRxGridOptions = [dgEditing, dgTitles, dgIndicator, dgColumnResize,
dgColLines, dgRowLines, dgConfirmDelete, dgCancelOnExit];
{$IFDEF RX_V110}
{$IFDEF CBUILDER}
{$NODEFINE DefRxGridOptions}
{$ENDIF}
{$ENDIF}
type
TTitleClickEvent = procedure (Sender: TObject; ACol: Longint;
Field: TField) of object;
TCheckTitleBtnEvent = procedure (Sender: TObject; ACol: Longint;
Field: TField; var Enabled: Boolean) of object;
TGetCellParamsEvent = procedure (Sender: TObject; Field: TField;
AFont: TFont; var Background: TColor; Highlight: Boolean) of object;
TSortMarker = (smNone, smDown, smUp);
TGetBtnParamsEvent = procedure (Sender: TObject; Field: TField;
AFont: TFont; var Background: TColor; var SortMarker: TSortMarker;
IsDown: Boolean) of object;
TGetCellPropsEvent = procedure (Sender: TObject; Field: TField;
AFont: TFont; var Background: TColor) of object; { obsolete }
TDBEditShowEvent = procedure (Sender: TObject; Field: TField;
var AllowEdit: Boolean) of object;
TRxDBGrid = class(TDBGrid)
private
FAutoAppend: Boolean; // Polaris
FSizingIndex, FSizingOfs: Integer; // Polaris
FShowGlyphs: Boolean;
FDefaultDrawing: Boolean;
FMultiSelect: Boolean;
FSelecting: Boolean;
FClearSelection: Boolean;
FTitleButtons: Boolean;
FPressedCol: TColumn;
FPressed: Boolean;
FTracking: Boolean;
FSwapButtons: Boolean;
FIniLink: TIniLink;
FDisableCount: Integer;
FFixedCols: Integer;
FMsIndicators: TImageList;
FOnCheckButton: TCheckTitleBtnEvent;
FOnGetCellProps: TGetCellPropsEvent;
FOnGetCellParams: TGetCellParamsEvent;
FOnGetBtnParams: TGetBtnParamsEvent;
FOnEditChange: TNotifyEvent;
FOnKeyPress: TKeyPressEvent;
FOnTitleBtnClick: TTitleClickEvent;
FOnShowEditor: TDbEditShowEvent;
FOnTopLeftChanged: TNotifyEvent;
FSelectionAnchor: TBookmarkStr;
function GetImageIndex(Field: TField): Integer;
procedure SetShowGlyphs(Value: Boolean);
procedure SetRowsHeight(Value: Integer);
function GetRowsHeight: Integer;
function GetStorage: TFormPlacement;
procedure SetStorage(Value: TFormPlacement);
procedure IniSave(Sender: TObject);
procedure IniLoad(Sender: TObject);
procedure SetMultiSelect(Value: Boolean);
procedure SetTitleButtons(Value: Boolean);
procedure StopTracking;
procedure TrackButton(X, Y: Integer);
function ActiveRowSelected: Boolean;
function GetSelCount: Longint;
procedure InternalSaveLayout(IniFile: TObject; const Section: string);
procedure InternalRestoreLayout(IniFile: TObject; const Section: string);
procedure SaveColumnsLayout(IniFile: TObject; const Section: string);
procedure RestoreColumnsLayout(IniFile: TObject; const Section: string);
function GetOptions: TDBGridOptions;
procedure SetOptions(Value: TDBGridOptions);
function GetMasterColumn(ACol, ARow: Longint): TColumn;
function GetTitleOffset: Byte;
procedure SetFixedCols(Value: Integer);
function GetFixedCols: Integer;
{$IFDEF RX_D4}
function CalcLeftColumn: Integer;
{$ENDIF}
procedure WMChar(var Msg: TWMChar); message WM_CHAR;
procedure WMCancelMode(var Message: TMessage); message WM_CANCELMODE;
procedure WMRButtonUp(var Message: TWMMouse); message WM_RBUTTONUP;
protected
function AcquireFocus: Boolean;
function CanEditShow: Boolean; override;
function CreateEditor: TInplaceEdit; override;
procedure DoTitleClick(ACol: Longint; AField: TField); dynamic;
procedure CheckTitleButton(ACol, ARow: Longint; var Enabled: Boolean); dynamic;
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
procedure DrawDataCell(const Rect: TRect; Field: TField;
State: TGridDrawState); override; { obsolete from Delphi 2.0 }
procedure EditChanged(Sender: TObject); dynamic;
procedure GetCellProps(Field: TField; AFont: TFont; var Background: TColor;
Highlight: Boolean); dynamic;
function HighlightCell(DataCol, DataRow: Integer; const Value: string;
AState: TGridDrawState): Boolean; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure SetColumnAttributes; override;
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;
{$IFDEF RX_D4}
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
{$ENDIF}
procedure Scroll(Distance: Integer); override;
procedure LayoutChanged; override;
procedure TopLeftChanged; override;
procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
Column: TColumn; State: TGridDrawState); override;
procedure ColWidthsChanged; override;
procedure Paint; override;
{$IFDEF RX_D4} // Polaris
procedure CalcSizingState(X, Y: Integer; var State: TGridState;
var Index: Longint; var SizingPos, SizingOfs: Integer;
var FixedInfo: TGridDrawInfo); override;
{$ENDIF} // Polaris
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DefaultDataCellDraw(const Rect: TRect; Field: TField;
State: TGridDrawState);
procedure DisableScroll;
procedure EnableScroll;
function ScrollDisabled: Boolean;
procedure MouseToCell(X, Y: Integer; var ACol, ARow: Longint);
procedure SaveLayout(IniFile: TIniFile);
procedure RestoreLayout(IniFile: TIniFile);
procedure SelectAll;
procedure UnselectAll;
procedure ToggleRowSelection;
procedure GotoSelection(Index: Longint);
procedure SaveLayoutReg(IniFile: TRegIniFile);
procedure RestoreLayoutReg(IniFile: TRegIniFile);
property SelectedRows;
property SelCount: Longint read GetSelCount;
property Canvas;
property Col;
property InplaceEditor;
property LeftCol;
property Row;
property VisibleRowCount;
property VisibleColCount;
property IndicatorOffset;
property TitleOffset: Byte read GetTitleOffset;
published
property AutoAppend: Boolean read FAutoAppend write FAutoAppend default True; // Polaris
property Options: TDBGridOptions read GetOptions write SetOptions
default DefRxGridOptions;
property FixedCols: Integer read GetFixedCols write SetFixedCols default 0;
property ClearSelection: Boolean read FClearSelection write FClearSelection
default True;
property DefaultDrawing: Boolean read FDefaultDrawing write FDefaultDrawing
default True;
property IniStorage: TFormPlacement read GetStorage write SetStorage;
property MultiSelect: Boolean read FMultiSelect write SetMultiSelect
default False;
property ShowGlyphs: Boolean read FShowGlyphs write SetShowGlyphs
default True;
property TitleButtons: Boolean read FTitleButtons write SetTitleButtons
default False;
property RowsHeight: Integer read GetRowsHeight write SetRowsHeight
stored False; { obsolete, for backward compatibility only }
property OnCheckButton: TCheckTitleBtnEvent read FOnCheckButton write FOnCheckButton;
property OnGetCellProps: TGetCellPropsEvent read FOnGetCellProps
write FOnGetCellProps; { obsolete }
property OnGetCellParams: TGetCellParamsEvent read FOnGetCellParams write FOnGetCellParams;
property OnGetBtnParams: TGetBtnParamsEvent read FOnGetBtnParams write FOnGetBtnParams;
property OnEditChange: TNotifyEvent read FOnEditChange write FOnEditChange;
property OnShowEditor: TDBEditShowEvent read FOnShowEditor write FOnShowEditor;
property OnTitleBtnClick: TTitleClickEvent read FOnTitleBtnClick write FOnTitleBtnClick;
property OnKeyPress: TKeyPressEvent read FOnKeyPress write FOnKeyPress;
property OnTopLeftChanged: TNotifyEvent read FOnTopLeftChanged write FOnTopLeftChanged;
{$IFDEF RX_D5}
property OnContextPopup;
{$ENDIF}
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
{$IFDEF RX_D4}
property OnMouseWheelDown;
property OnMouseWheelUp;
{$ENDIF}
end;
{ TRxDBComboEdit }
TRxDBComboEdit = class(TCustomComboEdit)
private
FDataLink: TFieldDataLink;
FCanvas: TControlCanvas;
FFocused: Boolean;
procedure DataChange(Sender: TObject);
procedure EditingChange(Sender: TObject);
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetFocused(Value: Boolean);
procedure SetReadOnly(Value: Boolean);
procedure UpdateData(Sender: TObject);
procedure WMCut(var Message: TMessage); message WM_CUT;
procedure WMPaste(var Message: TMessage); message WM_PASTE;
procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
protected
procedure Change; override;
function EditCanModify: Boolean; override;
function GetReadOnly: Boolean; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure Loaded; override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure Reset; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{$IFDEF RX_D4}
function ExecuteAction(Action: TBasicAction): Boolean; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
function UseRightToLeftAlignment: Boolean; override;
{$ENDIF}
property Button;
property Field: TField read GetField;
published
//Polaris
property Align;
property AutoSelect;
property BorderStyle;
property ButtonHint;
property CharCase;
property ClickKey;
property Color;
property Ctl3D;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property DirectInput;
property DragCursor;
property DragMode;
property Enabled;
property Font;
property GlyphKind;
{ Ensure GlyphKind is published before Glyph and ButtonWidth }
property Glyph;
property ButtonWidth;
property HideSelection;
{$IFDEF RX_D4}
property Anchors;
property BiDiMode;
property Constraints;
property DragKind;
property ParentBiDiMode;
{$ENDIF}
{$IFNDEF VER90}
property ImeMode;
property ImeName;
{$ENDIF}
property MaxLength;
property NumGlyphs;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnButtonClick;
property OnChange;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
{$IFDEF RX_D5}
property OnContextPopup;
{$ENDIF}
{$IFDEF RX_D4}
property OnEndDock;
property OnStartDock;
{$ENDIF}
end;
{ TDBDateEdit }
TDBDateEdit = class(TCustomDateEdit)
private
FInReset: Boolean; // Polaris
FDataLink: TFieldDataLink;
FCanvas: TControlCanvas;
procedure DataChange(Sender: TObject);
procedure EditingChange(Sender: TObject);
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetReadOnly(Value: Boolean);
procedure UpdateData(Sender: TObject);
procedure AfterPopup(Sender: TObject; var Date: TDateTime; var Action: Boolean);
procedure WMCut(var Message: TMessage); message WM_CUT;
procedure WMPaste(var Message: TMessage); message WM_PASTE;
procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
protected
procedure AcceptValue(const Value: Variant); override;
procedure ApplyDate(Value: TDateTime); override;
function GetReadOnly: Boolean; override;
procedure Change; override;
function EditCanModify: Boolean; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure Reset; override;
// Polaris
procedure SetDate(Value: TDateTime); override;
function IsValidDate(Value: TDateTime): Boolean;
// Polaris
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure UpdateMask; override;
{$IFDEF RX_D4}
function ExecuteAction(Action: TBasicAction): Boolean; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
function UseRightToLeftAlignment: Boolean; override;
{$ENDIF}
property Field: TField read GetField;
published
// Polaris
property DateAutoBetween;
property MinDate;
property MaxDate;
property Align;
// Polaris
property CalendarHints;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
property AutoSelect;
property BlanksChar;
property BorderStyle;
property ButtonHint;
property CheckOnExit;
property ClickKey;
property Color;
property Ctl3D;
property DefaultToday;
property DialogTitle;
property DirectInput;
property DragCursor;
property DragMode;
property Enabled;
property Font;
property GlyphKind;
{ Ensure GlyphKind is declared before Glyph and ButtonWidth }
property Glyph;
property ButtonWidth;
property HideSelection;
{$IFDEF RX_D4}
property Anchors;
property BiDiMode;
property Constraints;
property DragKind;
property ParentBiDiMode;
{$ENDIF}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -