📄 jvdbcontrols.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: JvDBCtrl.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
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.sourceforge.net
Known Issues:
=== NEW IN JVCL 3.0 ==
TJvDBMaskEdit is a new control, added by Warren Postma.
Major Issues:
EditMask property enables operation as masked edit, which doesn't
work properly in a Control Grid, yet, if you set the EditMask.
You can use it as a generic editor control inside a control grid.
-- Warren Postma (warrenpstma att hotmail dott com)
-----------------------------------------------------------------------------}
// $Id: JvDBControls.pas,v 1.90 2005/03/06 23:04:08 remkobonte Exp $
unit JvDBControls;
{$I jvcl.inc}
interface
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
Windows,
{$IFDEF VCL}
Messages,
{$ENDIF VCL}
Classes, Graphics, Controls, StdCtrls, DBCtrls, DB,
JvSecretPanel, JvLabel, JvToolEdit, JvMaskEdit, JvBaseEdits;
type
{ NEW VALIDATION EVENT }
TJvDBAcceptValueEvent = procedure(Sender: TObject; OldValue: string;
var NewValue: string; var Accept, Post: Boolean) of object;
{NEW IN JVCL3.0 - Enhanced DBEdit/DBMaskEdit }
TJvDBMaskEdit = class(TJvCustomMaskEdit) // same base as TJvMaskEdit, plus data aware.
private
{Standard data-aware crap}
FDataLink: TFieldDataLink;
FCanvas: TControlCanvas;
FAlignment: TAlignment;
FFocused: Boolean;
{new: Specific to this component}
// value of text in the edit control at the time
// that keyboard focus enters the control:
FOriginalValue: string;
// Validation/event.
FOnAcceptNewValue: TJvDBAcceptValueEvent;
procedure ActiveChange(Sender: TObject);
procedure DataChange(Sender: TObject);
procedure EditingChange(Sender: TObject);
function GetCanvas: TCanvas;
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
function GetTextMargins: TPoint;
procedure ResetMaxLength;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetFocused(Value: Boolean);
procedure UpdateData(Sender: TObject);
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
procedure CMGetDataLink(var Msg: TMessage); message CM_GETDATALINK;
function GetReadOnly: Boolean; reintroduce;
procedure SetReadOnly(Value: Boolean); reintroduce;
protected
procedure DoEnter; override;
procedure DoExit; override;
procedure WMCut(var Msg: TMessage); message WM_CUT;
procedure WMPaste(var Msg: TMessage); message WM_PASTE;
procedure WMUndo(var Msg: TMessage); message WM_UNDO;
procedure Change; override;
function EditCanModify: 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;
function ExecuteAction(Action: TBasicAction): Boolean; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
function UseRightToLeftAlignment: Boolean; override;
property Field: TField read GetField;
property Canvas: TCanvas read GetCanvas;
published
{ Here are the common designtime properties, exactly like the VCL TDBEdit }
property Anchors;
property AutoSelect;
property AutoSize;
property BevelEdges;
property BevelInner;
property BevelOuter;
property BevelKind;
property BevelWidth;
property BiDiMode;
property BorderStyle;
property CharCase;
property Color;
property Constraints;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
{$IFDEF VCL}
property Flat;
property ParentCtl3D;
{$ENDIF VCL}
property Font;
property ImeMode;
property ImeName;
property MaxLength;
property ParentBiDiMode;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PasswordChar;
property PopupMenu;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
{Common JEDI Niceties}
property BeepOnError;
{ designtime properties SPECIFIC to only JvDBMaskEdit: }
property EditMask; { from TJvCustomMaskEdit }
property OnChange;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
{new event}
// This event is fired when a new value has been entered, and the Enter key is
// hit, and the mask checking worked, and we are asking the user
// for whether to accept the entry, or not, and if so, the end
// user may also want to automatically set a flag to cause an automatic Post
// after the db control does a write to the fieldlink.
property OnAcceptNewValue: TJvDBAcceptValueEvent read FOnAcceptNewValue write FOnAcceptNewValue;
end;
TJvDBComboEdit = class(TJvCustomComboEdit)
private
FDataLink: TFieldDataLink;
FCanvas: TControlCanvas;
FFocused: Boolean;
procedure DataChange(Sender: TObject);
procedure EditingChange(Sender: TObject);
function GetCanvas: TCanvas;
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetFocused(Value: Boolean);
procedure UpdateData(Sender: TObject);
procedure CMGetDataLink(var Msg: TMessage); message CM_GETDATALINK;
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
function GetReadOnly: Boolean; reintroduce;
procedure SetReadOnly(Value: Boolean); reintroduce;
protected
procedure DoEnter; override;
procedure DoExit; override;
procedure WMCut(var Msg: TMessage); message WM_CUT;
procedure WMPaste(var Msg: TMessage); message WM_PASTE;
procedure Change; override;
function EditCanModify: 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;
property AlwaysEnableButton default True;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function ExecuteAction(Action: TBasicAction): Boolean; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
function UseRightToLeftAlignment: Boolean; override;
{$IFNDEF BCB5}
// Do not use this under BCB5, you will crash the linker.
property Button;
{$ENDIF !BCB5}
property Field: TField read GetField;
property Canvas: TCanvas read GetCanvas;
published
//Polaris
property AlwaysShowPopup default False;
property Align;
property Action;
property AutoSelect;
property BeepOnError;
property BorderStyle;
property ButtonHint;
property CharCase;
property ClickKey;
property Color;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property DirectInput;
property DragCursor;
property DragMode;
property Enabled;
{$IFDEF VCL}
property Flat;
property ParentCtl3D;
{$ENDIF VCL}
property Font;
property ImageIndex;
property Images;
property ImageKind;
property ButtonWidth;
property HideSelection;
property Anchors;
property BiDiMode;
property Constraints;
property DragKind;
property ParentBiDiMode;
property ImeMode;
property ImeName;
property MaxLength;
property ParentColor;
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;
property OnContextPopup;
property OnEndDock;
property OnStartDock;
(* ++ RDB ++ *)
property ClipboardCommands;
property DisabledTextColor;
property DisabledColor;
(* -- RDB -- *)
end;
TJvDBDateEdit = class(TJvCustomDateEdit)
private
FInReset: Boolean; // Polaris
FDataLink: TFieldDataLink;
FCanvas: TControlCanvas;
procedure DataChange(Sender: TObject);
procedure EditingChange(Sender: TObject);
function GetCanvas: TCanvas;
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure UpdateData(Sender: TObject);
procedure AfterPopup(Sender: TObject; var Date: TDateTime; var Action: Boolean);
procedure CMGetDataLink(var Msg: TMessage); message CM_GETDATALINK;
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
function GetReadOnly: Boolean; reintroduce;
procedure SetReadOnly(Value: Boolean); reintroduce;
protected
procedure DoExit; override;
procedure WMCut(var Msg: TMessage); message WM_CUT;
procedure WMPaste(var Msg: TMessage); message WM_PASTE;
procedure AcceptValue(const Value: Variant); override;
procedure ApplyDate(Value: TDateTime); 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
procedure PopupDropDown(DisableEdit: Boolean); override;
property AlwaysEnableButton default True;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure UpdateMask; override;
function ExecuteAction(Action: TBasicAction): Boolean; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
function UseRightToLeftAlignment: Boolean; override;
property Field: TField read GetField;
property Canvas: TCanvas read GetCanvas;
published
// Polaris
property AlwaysShowPopup default False;
property DateAutoBetween;
property MinDate;
property MaxDate;
property Align;
// Polaris
property Action;
property BeepOnError;
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 ButtonFlat;
property CalendarHints;
property CheckOnExit;
property ClickKey;
property Color;
property DefaultToday;
property DialogTitle;
property DirectInput;
{$IFDEF VCL}
property DragCursor;
property BiDiMode;
property DragKind;
property Flat;
property ParentBiDiMode;
property ParentCtl3D;
property ImeMode;
property ImeName;
property OnEndDock;
property OnStartDock;
{$ENDIF VCL}
property DragMode;
property Enabled;
property Font;
property Glyph;
property GroupIndex;
property ImageIndex;
property Images;
property ImageKind;
property NumGlyphs;
property ButtonWidth;
property HideSelection;
property Anchors;
property Constraints;
property MaxLength;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PopupAlign;
property PopupColor;
property PopupMenu;
property ShowHint;
property CalendarStyle;
property StartOfWeek;
property Weekends;
property WeekendColor;
property YearDigits;
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 OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property OnContextPopup;
property ClipboardCommands; // RDB
property DisabledTextColor; // RDB
property DisabledColor; // RDB
property OnKeyDown; // RDB
end;
TJvDBCalcEdit = class(TJvCalcEdit)
private
FDataLink: TFieldDataLink;
FDefaultParams: Boolean;
//Polaris
FLEmptyIsNull: Boolean;
FEmptyIsNull: Boolean;
procedure SetEmptyIsNull(Value: Boolean);
function GetZeroEmpty: Boolean;
procedure SetZeroEmpty(Value: Boolean);
function StoreEmptyIsNull: Boolean;
//Polaris
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 SetDefaultParams(Value: Boolean);
procedure UpdateFieldData(Sender: TObject);
procedure CMGetDataLink(var Msg: TMessage); message CM_GETDATALINK;
function GetReadOnly: Boolean; reintroduce;
procedure SetReadOnly(Value: Boolean); reintroduce;
protected
procedure DoExit; override;
procedure WMCut(var Msg: TMessage); message WM_CUT;
procedure WMPaste(var Msg: TMessage); message WM_PASTE;
procedure AcceptValue(const Value: Variant); override;
function GetDisplayText: string; override;
procedure Change; override;
procedure SetText(const AValue: string); override;
procedure DataChanged; override; //Polaris
function EditCanModify: Boolean; override;
function IsValidChar(Key: Char): Boolean; override;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -