📄 jvdbgrid.pas
字号:
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvDBGrid.PAS, released on 2002-07-04.
The Initial Developers of the Original Code are: Fedor Koshevnikov, Igor Pavluk and Serge Korolev
Copyright (c) 1997, 1998 Fedor Koshevnikov, Igor Pavluk and Serge Korolev
Copyright (c) 2001,2002 SGB Software
All Rights Reserved.
Contributor(s):
Polaris Software
Lionel Reynaud
Flemming Brandt Clausen
Fr閐閞ic Leneuf-Magaud
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.sourceforge.net
-----------------------------------------------------------------------------
INFO: Draw events are triggered in this order:
- Title cells:
OnGetBtnParams
OnDrawColumnTitle
- Data cells:
OnGetCellParams
OnDrawColumnCell
OnGetCellProps and OnDrawDataCell are obsolete.
-----------------------------------------------------------------------------
Known Issues:
- THE AlwaysShowEditor OPTION IS NOT COMPATIBLE WITH CUSTOM EDIT CONTROLS AND BOOLEAN EDITOR.
Custom edit controls and boolean editor are deactivated when this option is set to True.
2004/07/08 - WPostma merged changes by Fr閐閞ic Leneuf-Magaud and ahuser.
-----------------------------------------------------------------------------}
// $Id: JvDBGrid.pas,v 1.105 2005/03/09 07:24:57 marquardt Exp $
unit JvDBGrid;
{$I jvcl.inc}
interface
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
{$IFDEF VCL}
Windows, Messages,
{$ENDIF VCL}
Classes, Graphics, Controls, Grids, Menus, DBGrids, DB,
Contnrs,
JvTypes, {JvTypes contains Exception base class}
JvAppStorage, JvFormPlacement, JvExDBGrids;
const
DefJvGridOptions = [dgEditing, dgTitles, dgIndicator, dgColumnResize,
dgColLines, dgRowLines, dgConfirmDelete, dgCancelOnExit];
{$IFDEF BCB}
{$NODEFINE DefJvGridOptions}
{$ENDIF BCB}
JvDefaultAlternateRowColor = TColor($00CCCCCC); // Light gray
JvDefaultAlternateRowFontColor = TColor($00000000); // Black
// Consts for AutoSizeColumnIndex
JvGridResizeProportionally = -1;
JvGridResizeLastVisibleCol = -2;
type
TJvDBGrid = class;
// Consts for TJvDBGridLayoutChangeLink
TJvDBGridLayoutChangeKind = (lcLayoutChanged, lcSizeChanged, lcTopLeftChanged);
TSelectColumn = (scDataBase, scGrid);
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 ASortMarker: TSortMarker;
IsDown: Boolean) of object;
TGetCellPropsEvent = procedure(Sender: TObject; Field: TField;
AFont: TFont; var Background: TColor) of object; { obsolete }
TJvDBEditShowEvent = procedure(Sender: TObject; Field: TField;
var AllowEdit: Boolean) of object;
TDrawColumnTitleEvent = procedure(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; AColumn: TColumn; ASortMarker: TBitmap; IsDown: Boolean;
var Offset: Integer; var DefaultDrawText,
DefaultDrawSortMarker: Boolean) of object;
TJvTitleHintEvent = procedure(Sender: TObject; Field: TField;
var AHint: string; var ATimeOut: Integer) of object;
TJvCellHintEvent = TJvTitleHintEvent;
TJvDBGridLayoutChangeEvent = procedure(Grid: TJvDBGrid; Kind: TJvDBGridLayoutChangeKind) of object;
TJvDBGridLayoutChangeLink = class
private
FOnChange: TJvDBGridLayoutChangeEvent;
public
procedure DoChange(Grid: TJvDBGrid; Kind: TJvDBGridLayoutChangeKind);
property OnChange: TJvDBGridLayoutChangeEvent read FOnChange write FOnChange;
end;
EJVCLDbGridException = Class(EJVCLException);
TJvSelectDialogColumnStrings = class(TPersistent)
private
FCaption: string;
FRealNamesOption: string;
FOK: string;
FNoSelectionWarning: string;
public
constructor Create;
published
property Caption: string read FCaption write FCaption;
property RealNamesOption: string read FRealNamesOption write FRealNamesOption;
property OK: string read FOK write FOK;
property NoSelectionWarning: string read FNoSelectionWarning write FNoSelectionWarning;
end;
TJvDBGridControlSize = (
fcCellSize, // Fit the control into the cell
fcDesignSize, // Leave the control as it was at design time
fcBiggest // Take the biggest size between Cell size and Design time size
);
TJvDBGridControl = class(TCollectionItem)
private
FControlName: string;
FFieldName: string;
FFitCell: TJvDBGridControlSize;
FDesignWidth: Integer; // value set when needed by PlaceControl
FDesignHeight: Integer; // value set when needed by PlaceControl
public
procedure Assign(Source: TPersistent); override;
published
property ControlName: string read FControlName write FControlName;
property FieldName: string read FFieldName write FFieldName;
property FitCell: TJvDBGridControlSize read FFitCell write FFitCell;
end;
TJvDBGridControls = class(TCollection)
private
FParentDBGrid: TJvDBGrid;
function GetItem(Index: Integer): TJvDBGridControl;
procedure SetItem(Index: Integer; Value: TJvDBGridControl);
protected
function GetOwner: TPersistent; override;
public
constructor Create(ParentDBGrid: TJvDBGrid);
function Add: TJvDBGridControl;
function ControlByField(const FieldName: string): TJvDBGridControl;
function ControlByName(const CtrlName: string): TJvDBGridControl;
property Items[Index: Integer]: TJvDBGridControl read GetItem write SetItem;
end;
TCharList = set of Char;
TJvDBGrid = class(TJvExDBGrid)
private
FAutoSort: Boolean;
FBeepOnError: Boolean; // WAP
FAutoAppend: Boolean; // Polaris
FSizingIndex: Integer; // Polaris
FSizingOfs: Integer; // Polaris
FShowGlyphs: Boolean;
FDefaultDrawing: Boolean;
FMultiSelect: Boolean;
FSelecting: Boolean;
FClearSelection: Boolean;
FTitleButtons: Boolean;
FPressedCol: TColumn;
FPressed: Boolean;
FTracking: Boolean;
FSwapButtons: Boolean;
FIniLink: TJvIniLink;
FDisableCount: Integer;
FFixedCols: Integer;
FMsIndicators: TImageList;
FOnCheckButton: TCheckTitleBtnEvent;
FOnGetCellProps: TGetCellPropsEvent;
FOnGetCellParams: TGetCellParamsEvent;
FOnGetBtnParams: TGetBtnParamsEvent;
FOnEditChange: TNotifyEvent;
FOnTitleBtnClick: TTitleClickEvent;
FOnTitleBtnDblClick: TTitleClickEvent;
FOnShowEditor: TJvDBEditShowEvent;
FOnTopLeftChanged: TNotifyEvent;
FSelectionAnchor: TBookmarkStr;
FOnDrawColumnTitle: TDrawColumnTitleEvent;
FWord: string;
FShowTitleHint: Boolean;
FSortedField: string;
FPostOnEnter: Boolean;
FSelectColumn: TSelectColumn;
FTitleArrow: Boolean;
FTitlePopup: TPopupMenu;
FOnShowTitleHint: TJvTitleHintEvent;
FOnTitleArrowMenuEvent: TNotifyEvent;
FAlternateRowColor: TColor;
FAlternateRowFontColor: TColor;
FAutoSizeColumns: Boolean;
FAutoSizeColumnIndex: Integer;
FMinColumnWidth: Integer;
FMaxColumnWidth: Integer;
FInAutoSize: Boolean;
FSelectColumnsDialogStrings: TJvSelectDialogColumnStrings;
FTitleColumn: TColumn;
FSortMarker: TSortMarker;
FShowCellHint: Boolean;
FOnShowCellHint: TJvCellHintEvent;
FCharList: TCharList;
FControls: TJvDBGridControls;
FCurrentControl: TWinControl;
FOldControlWndProc: TWndMethod;
FBooleanEditor: TField;
FWordWrap: Boolean;
FAutoSizeRows: Boolean;
FRowResize: Boolean;
FRowsHeight: Integer;
FTitleRowHeight: Integer;
FChangeLinks: TObjectList;
FShowMemos: Boolean;
procedure SetAutoSizeRows(Value: Boolean);
procedure SetRowResize(Value: Boolean);
procedure SetRowsHeight(Value: Integer);
procedure SetTitleRowHeight(Value: Integer);
function GetImageIndex(Field: TField): Integer;
procedure SetShowGlyphs(Value: Boolean);
function GetStorage: TJvFormPlacement;
procedure SetStorage(Value: TJvFormPlacement);
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 SaveColumnsLayout(const AppStorage: TJvCustomAppStorage; const Section: string);
procedure RestoreColumnsLayout(const AppStorage: TJvCustomAppStorage; 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;
function CalcLeftColumn: Integer;
procedure WMChar(var Msg: TWMChar); message WM_CHAR;
procedure WMCancelMode(var Msg: TMessage); message WM_CANCELMODE;
procedure WMRButtonUp(var Msg: TWMMouse); message WM_RBUTTONUP;
procedure CMHintShow(var Msg: TMessage); message CM_HINTSHOW;
procedure SetTitleArrow(const Value: Boolean);
procedure ShowSelectColumnClick;
procedure SetAlternateRowColor(const Value: TColor);
procedure ReadAlternateRowColor(Reader: TReader);
procedure SetAlternateRowFontColor(const Value: TColor);
procedure ReadAlternateRowFontColor(Reader: TReader);
procedure SetAutoSizeColumnIndex(const Value: Integer);
procedure SetAutoSizeColumns(const Value: Boolean);
procedure SetMaxColumnWidth(const Value: Integer);
procedure SetMinColumnWidth(const Value: Integer);
procedure SetSelectColumnsDialogStrings(const Value: TJvSelectDialogColumnStrings);
procedure SetSortedField(const Value: string);
procedure SetSortMarker(const Value: TSortMarker);
procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
procedure SetShowMemos(const Value: Boolean);
procedure SetControls(Value: TJvDBGridControls);
procedure HideCurrentControl;
procedure ControlWndProc(var Message: TMessage);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -