📄 jvdbgrid.pas
字号:
function UseDefaultEditor: Boolean;
procedure ChangeBoolean(const FieldValueChange: Shortint);
function DoKeyPress(var Msg: TWMChar): Boolean;
procedure SetWordWrap(Value: Boolean);
procedure NotifyLayoutChange(const Kind: TJvDBGridLayoutChangeKind);
protected
FCurrentDrawRow: Integer;
procedure MouseLeave(Control: TControl); override;
function AcquireFocus: Boolean;
function CanEditShow: Boolean; override;
function CreateEditor: TInplaceEdit; override;
procedure DblClick; override;
function DoTitleBtnDblClick: Boolean; dynamic;
procedure DoTitleClick(ACol: Longint; AField: TField); dynamic;
procedure CheckTitleButton(ACol, ARow: Longint; var Enabled: Boolean); dynamic;
function SortMarkerAssigned(const AFieldName: string): Boolean; dynamic;
function ChangeSortMarker(const Value: TSortMarker): Boolean;
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;
function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
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;
// Polaris
procedure CalcSizingState(X, Y: Integer; var State: TGridState;
var Index: Longint; var SizingPos, SizingOfs: Integer;
var FixedInfo: TGridDrawInfo); override;
procedure DoDrawColumnTitle(ACanvas: TCanvas; ARect: TRect; AColumn: TColumn;
ASortMarker: TBitmap; IsDown: Boolean; var Offset: Integer;
var DefaultDrawText, DefaultDrawSortMarker: Boolean); virtual;
procedure ColEnter; override;
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean; override;
procedure EditButtonClick; override;
{$IFDEF COMPILER5}
procedure FocusCell(ACol, ARow: Longint; MoveAnchor: Boolean);
{$ENDIF COMPILER5}
procedure CellClick(Column: TColumn); override;
procedure DefineProperties(Filer: TFiler); override;
procedure DoMinColWidth; virtual;
procedure DoMaxColWidth; virtual;
procedure DoAutoSizeColumns; virtual;
procedure Resize; override;
procedure Loaded; override;
function GetMinColWidth(Default: Integer): Integer;
function GetMaxColWidth(Default: Integer): Integer;
function LastVisibleColumn: Integer;
function FirstVisibleColumn: Integer;
procedure TitleClick(Column: TColumn); override;
procedure DoGetBtnParams(Field: TField; AFont: TFont; var Background: TColor;
var ASortMarker: TSortMarker; IsDown: Boolean); virtual;
procedure PlaceControl(Control: TWinControl; ACol, ARow: Integer); virtual;
procedure RowHeightsChanged; override;
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 SelectAll;
procedure UnselectAll;
procedure ToggleRowSelection;
procedure GotoSelection(Index: Longint);
procedure LoadFromAppStore(const AppStorage: TJvCustomAppStorage; const Path: string);
procedure SaveToAppStore(const AppStorage: TJvCustomAppStorage; const Path: string);
procedure Load;
procedure Save;
procedure UpdateTabStops(ALimit: Integer = -1);
procedure ShowColumnsDialog;
procedure CloseControl; // Hide the current edit control and give the focus to the grid
procedure InitializeColumnsWidth(const MinWidth, MaxWidth: Integer;
const DisplayWholeTitle: Boolean; const FixedWidths: array of Integer);
procedure RegisterLayoutChangeLink(Link: TJvDBGridLayoutChangeLink);
procedure UnregisterLayoutChangeLink(Link: TJvDBGridLayoutChangeLink);
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;
property CharList: TCharList read FCharList write FCharList;
published
property AutoAppend: Boolean read FAutoAppend write FAutoAppend default True; // Polaris
property SortMarker: TSortMarker read FSortMarker write SetSortMarker default smNone;
property AutoSort: Boolean read FAutoSort write FAutoSort default True;
property Options: TDBGridOptions read GetOptions write SetOptions default DefJvGridOptions;
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: TJvFormPlacement 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 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: TJvDBEditShowEvent read FOnShowEditor write FOnShowEditor;
property OnTitleBtnClick: TTitleClickEvent read FOnTitleBtnClick write FOnTitleBtnClick;
property OnTitleBtnDblClick: TTitleClickEvent read FOnTitleBtnDblClick write FOnTitleBtnDblClick;
property OnTopLeftChanged: TNotifyEvent read FOnTopLeftChanged write FOnTopLeftChanged;
property OnDrawColumnTitle: TDrawColumnTitleEvent read FOnDrawColumnTitle write FOnDrawColumnTitle;
property OnContextPopup;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnMouseWheelDown;
property OnMouseWheelUp;
property BeepOnError: Boolean read FBeepOnError write FBeepOnError default True; // WAP.
property AlternateRowColor: TColor read FAlternateRowColor write SetAlternateRowColor default clNone;
property AlternateRowFontColor: TColor read FAlternateRowFontColor write SetAlternateRowFontColor default clNone;
property PostOnEnter: Boolean read FPostOnEnter write FPostOnEnter default False;
property SelectColumn: TSelectColumn read FSelectColumn write FSelectColumn default scDataBase;
property SortedField: string read FSortedField write SetSortedField;
property ShowTitleHint: Boolean read FShowTitleHint write FShowTitleHint default False;
property TitleArrow: Boolean read FTitleArrow write SetTitleArrow default False;
property TitlePopup: TPopupMenu read FTitlePopup write FTitlePopup;
property OnShowTitleHint: TJvTitleHintEvent read FOnShowTitleHint write FOnShowTitleHint;
property OnTitleArrowMenuEvent: TNotifyEvent read FOnTitleArrowMenuEvent write FOnTitleArrowMenuEvent;
property ShowCellHint: Boolean read FShowCellHint write FShowCellHint default False;
property OnShowCellHint: TJvCellHintEvent read FOnShowCellHint write FOnShowCellHint;
property MaxColumnWidth: Integer read FMaxColumnWidth write SetMaxColumnWidth default 0;
property MinColumnWidth: Integer read FMinColumnWidth write SetMinColumnWidth default 0;
property AutoSizeColumns: Boolean read FAutoSizeColumns write SetAutoSizeColumns default False;
property AutoSizeColumnIndex: Integer read FAutoSizeColumnIndex write SetAutoSizeColumnIndex
default JvGridResizeProportionally;
property SelectColumnsDialogStrings: TJvSelectDialogColumnStrings read FSelectColumnsDialogStrings write
SetSelectColumnsDialogStrings;
{ EditControls: list of controls used to edit data }
property EditControls: TJvDBGridControls read FControls write SetControls;
{ AutoSizeRows: are rows resized automatically ? }
property AutoSizeRows: Boolean read FAutoSizeRows write SetAutoSizeRows default True;
{ RowResize: can rows be resized with the mouse ? }
property RowResize: Boolean read FRowResize write SetRowResize default False;
{ RowsHeight: data rows height }
property RowsHeight: Integer read FRowsHeight write SetRowsHeight;
{ TitleRowHeight: title row height (cannot be resized with the mouse) }
property TitleRowHeight: Integer read FTitleRowHeight write SetTitleRowHeight;
{ WordWrap: are memo and string fields displayed on many lines ? }
property WordWrap: Boolean read FWordWrap write SetWordWrap default False;
// If true, Memo fields are shown as text
property ShowMemos: Boolean read FShowMemos write SetShowMemos default True;
end;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvDBGrid.pas,v $';
Revision: '$Revision: 1.105 $';
Date: '$Date: 2005/03/09 07:24:57 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
{$IFDEF HAS_UNIT_VARIANTS}
Variants,
{$ENDIF HAS_UNIT_VARIANTS}
SysUtils, Math, TypInfo, Forms, StdCtrls, Dialogs, DBConsts,
{$IFDEF COMPILER6_UP}
StrUtils,
JvDBLookup,
{$ENDIF COMPILER6_UP}
JvConsts, JvResources, JvDBUtils, JvJCLUtils, JvJVCLUtils,
JvAppStoragePropertyEngineDB, JvDBGridSelectColumnForm;
{$IFDEF MSWINDOWS}
{$R ..\Resources\JvDBGrid.res}
{$ENDIF MSWINDOWS}
{$IFDEF UNIX}
{$R ../Resources/JvDBGrid.res}
{$ENDIF UNIX}
type
TBookmarks = class(TBookmarkList);
TGridPicture = (gpBlob, gpMemo, gpPicture, gpOle, gpObject, gpData,
gpNotEmpty, gpMarkDown, gpMarkUp, gpChecked, gpUnChecked, gpPopup);
const
GridBmpNames: array [TGridPicture] of PChar =
('JvDBGridBLOB', 'JvDBGridMEMO', 'JvDBGridPICT', 'JvDBGridOLE', 'JvDBGridOBJECT',
'JvDBGridDATA', 'JvDBGridNOTEMPTY', 'JvDBGridSMDOWN', 'JvDBGridSMUP',
'JvDBGridCHECKED', 'JvDBGridUNCHECKED', 'JvDBGridPOPUP');
bmMultiDot = 'JvDBGridMSDOT';
bmMultiArrow = 'JvDBGridMSARROW';
var
GridBitmaps: array [TGridPicture] of TBitmap =
(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil);
FirstGridBitmaps: Boolean = True;
procedure FinalizeGridBitmaps;
var
I: TGridPicture;
begin
for I := Low(TGridPicture) to High(TGridPicture) do
FreeAndNil(GridBitmaps[I]);
end;
function GetGridBitmap(BmpType: TGridPicture): TBitmap;
begin
if GridBitmaps[BmpType] = nil then
begin
if FirstGridBitmaps then
FirstGridBitmaps := False;
GridBitmaps[BmpType] := TBitmap.Create;
GridBitmaps[BmpType].LoadFromResourceName(HInstance, GridBmpNames[BmpType]);
end;
Result := GridBitmaps[BmpType];
end;
procedure GridInvalidateRow(Grid: TJvDBGrid; Row: Longint);
var
I: Longint;
begin
for I := 0 to Grid.ColCount - 1 do
Grid.InvalidateCell(I, Row);
end;
//=== { TInternalInplaceEdit } ===============================================
{$IFDEF COMPILER6_UP}
type
TInternalInplaceEdit = class(TInplaceEditList)
private
FDataList: TJvDBLookupList; // TDBLookupListBox
FUseDataList: Boolean;
FLookupSource: TDataSource;
protected
procedure CloseUp(Accept: Boolean); override;
procedure DoEditButtonClick; override;
procedure DropDown; override;
procedure UpdateContents; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean; override;
public
constructor Create(Owner: TComponent); override;
property DataList: TJvDBLookupList read FDataList; // TDBLookupListBox
end;
constructor TInternalInplaceEdit.Create(Owner: TComponent);
begin
inherited Create(Owner);
FLookupSource := TDataSource.Create(Self);
end;
procedure TInternalInplaceEdit.CloseUp(Accept: Boolean);
var
MasterField: TField;
ListValue: Variant;
begin
if ListVisible then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -