📄 jvtooledit.pas
字号:
property TabStop;
property Text;
property Visible;
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 OnMouseEnter;
property OnMouseLeave;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property OnContextPopup;
end;
TCalendarStyle = (csPopup, csDialog);
TYearDigits = (dyDefault, dyFour, dyTwo);
const
{$IFDEF DEFAULT_POPUP_CALENDAR}
dcsDefault = csPopup;
{$ELSE}
dcsDefault = csDialog;
{$ENDIF DEFAULT_POPUP_CALENDAR}
type
TExecDateDialog = procedure(Sender: TObject; var ADate: TDateTime;
var Action: Boolean) of object;
TJvInvalidDateEvent = procedure(Sender: TObject; const DateString: string;
var NewDate: TDateTime; var Accept: Boolean) of object;
TJvCustomDateEdit = class(TJvCustomComboEdit)
private
FMinDate: TDateTime; // Polaris
FMaxDate: TDateTime; // Polaris
FTitle: string;
FOnAcceptDate: TExecDateDialog;
FOnInvalidDate: TJvInvalidDateEvent;
FDefaultToday: Boolean;
FPopupColor: TColor;
FCheckOnExit: Boolean;
FBlanksChar: Char;
FCalendarHints: TStringList;
FStartOfWeek: TDayOfWeekName;
FWeekends: TDaysOfWeek;
FWeekendColor: TColor;
FYearDigits: TYearDigits;
FDateFormat: string[10];
FFormatting: Boolean;
// Polaris
procedure SetMinDate(Value: TDateTime);
procedure SetMaxDate(Value: TDateTime);
// Polaris
function GetDate: TDateTime;
procedure SetYearDigits(Value: TYearDigits);
function GetPopupColor: TColor;
procedure SetPopupColor(Value: TColor);
function GetDialogTitle: string;
procedure SetDialogTitle(const Value: string);
function IsCustomTitle: Boolean;
function IsDateStored: Boolean;
function GetCalendarStyle: TCalendarStyle;
procedure SetCalendarStyle(Value: TCalendarStyle);
function GetCalendarHints: TStrings;
procedure SetCalendarHints(Value: TStrings);
procedure CalendarHintsChanged(Sender: TObject);
procedure SetWeekendColor(Value: TColor);
procedure SetWeekends(Value: TDaysOfWeek);
procedure SetStartOfWeek(Value: TDayOfWeekName);
procedure SetBlanksChar(Value: Char);
function TextStored: Boolean;
// Polaris
function StoreMinDate: Boolean;
function StoreMaxDate: Boolean;
// Polaris
function FourDigitYear: Boolean;
{$IFDEF VCL}
procedure WMContextMenu(var Msg: TWMContextMenu); message WM_CONTEXTMENU;
{$ENDIF VCL}
protected
// Polaris
FDateAutoBetween: Boolean;
procedure SetDate(Value: TDateTime); virtual;
function DoInvalidDate(const DateString: string; var ANewDate: TDateTime): Boolean; virtual;
procedure SetDateAutoBetween(Value: Boolean); virtual;
procedure TestDateBetween(var Value: TDateTime); virtual;
// Polaris
procedure DoExit; override;
procedure Change; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
{$IFDEF VCL}
procedure CreateWindowHandle(const Params: TCreateParams); override;
{$ENDIF VCL}
{$IFDEF VisualCLX}
procedure CreateWidget; override;
{$ENDIF VisualCLX}
function AcceptPopup(var Value: Variant): Boolean; override;
procedure AcceptValue(const Value: Variant); override;
procedure SetPopupValue(const Value: Variant); override;
function GetDateFormat: string;
procedure ApplyDate(Value: TDateTime); virtual;
procedure UpdateFormat;
procedure UpdatePopup;
procedure PopupDropDown(DisableEdit: Boolean); override;
property BlanksChar: Char read FBlanksChar write SetBlanksChar default ' ';
property CalendarHints: TStrings read GetCalendarHints write SetCalendarHints;
property CheckOnExit: Boolean read FCheckOnExit write FCheckOnExit default False;
property DefaultToday: Boolean read FDefaultToday write FDefaultToday default False;
property DialogTitle: string read GetDialogTitle write SetDialogTitle stored IsCustomTitle;
property EditMask stored False;
property Formatting: Boolean read FFormatting;
property ImageKind default ikDefault;
property PopupColor: TColor read GetPopupColor write SetPopupColor default clMenu;
property CalendarStyle: TCalendarStyle read GetCalendarStyle
write SetCalendarStyle default dcsDefault;
property StartOfWeek: TDayOfWeekName read FStartOfWeek write SetStartOfWeek default Mon;
property Weekends: TDaysOfWeek read FWeekends write SetWeekends default [Sun];
property WeekendColor: TColor read FWeekendColor write SetWeekendColor default clRed;
property YearDigits: TYearDigits read FYearDigits write SetYearDigits default dyDefault;
property OnAcceptDate: TExecDateDialog read FOnAcceptDate write FOnAcceptDate;
property OnInvalidDate: TJvInvalidDateEvent read FOnInvalidDate write FOnInvalidDate;
property MaxLength stored False;
{ Text is already stored via Date property }
property Text stored False;
public
// Polaris
property DateAutoBetween: Boolean read FDateAutoBetween write SetDateAutoBetween default True;
property MinDate: TDateTime read FMinDate write SetMinDate stored StoreMinDate;
property MaxDate: TDateTime read FMaxDate write SetMaxDate stored StoreMaxDate;
procedure ValidateEdit; override;
// Polaris
constructor Create(AOwner: TComponent); override;
class function DefaultImageIndex: TImageIndex; override;
destructor Destroy; override;
procedure CheckValidDate;
function GetDateMask: string;
procedure UpdateMask; virtual;
property Date: TDateTime read GetDate write SetDate stored IsDateStored;
property PopupVisible;
end;
TJvDateEdit = class(TJvCustomDateEdit)
// Polaris
protected
procedure SetDate(Value: TDateTime); override;
// Polaris
public
constructor Create(AOwner: TComponent); override;
property EditMask;
published
property Date;
property DateAutoBetween; // Polaris
property MinDate; // Polaris
property MaxDate; // Polaris
property Align; // Polaris
property Action;
property AutoSelect;
property AutoSize;
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 ReadOnly;
property ShowHint;
property ShowButton;
property CalendarStyle;
property StartOfWeek;
property Weekends;
property WeekendColor;
property YearDigits;
property TabOrder;
property TabStop;
property Text;
property Visible;
property OnAcceptDate;
property OnInvalidDate;
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 OnMouseEnter;
property OnMouseLeave;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property OnContextPopup;
property ClipboardCommands; // RDB
property DisabledTextColor; // RDB
property DisabledColor; // RDB
property OnKeyDown; // RDB
end;
EComboEditError = class(EJVCLException);
{ Utility routines }
procedure DateFormatChanged;
function EditorTextMargins(Editor: TCustomEdit): TPoint;
{$IFDEF VCL}
function PaintComboEdit(Editor: TJvCustomComboEdit; const AText: string;
AAlignment: TAlignment; StandardPaint: Boolean;
var ACanvas: TControlCanvas; var Msg: TWMPaint): Boolean;
function PaintEdit(Editor: TCustomEdit; const AText: string;
AAlignment: TAlignment; PopupVisible: Boolean;
DisabledTextColor: TColor; StandardPaint: Boolean;
var ACanvas: TControlCanvas; var Msg: TWMPaint): Boolean;
{$ENDIF VCL}
{$IFDEF VisualCLX}
function PaintComboEdit(Editor: TJvCustomComboEdit; const AText: string;
AAlignment: TAlignment; StandardPaint: Boolean; Flat: Boolean;
ACanvas: TCanvas): Boolean;
{ PaintEdit (CLX) needs an implemented EM_GETRECT message handler or a
TCustomComboEdit/TCustomComboMask class. If no EM_GETTEXT handler exists or
the class is derived from another class, it uses the ClientRect of the edit
control. }
function PaintEdit(Editor: TCustomEdit; const AText: WideString;
AAlignment: TAlignment; PopupVisible: Boolean;
DisabledTextColor: TColor; StandardPaint: Boolean; Flat: Boolean;
ACanvas: TCanvas): Boolean;
{$ENDIF VisualCLX}
{$IFDEF VisualCLX}
const
OBM_COMBO = 1;
{$ENDIF VisualCLX}
function LoadDefaultBitmap(Bmp: TBitmap; Item: Integer): Boolean;
function IsInWordArray(Value: Word; const A: array of Word): Boolean;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvToolEdit.pas,v $';
Revision: '$Revision: 1.171 $';
Date: '$Date: 2005/03/06 23:04:10 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
{$IFDEF HAS_UNIT_VARIANTS}
Variants,
{$ENDIF HAS_UNIT_VARIANTS}
{$IFDEF HAS_UNIT_RTLCONSTS}
RTLConsts,
{$ENDIF HAS_UNIT_RTLCONSTS}
Math, Consts,
{$IFDEF COMPILER6_UP}
MaskUtils,
{$ENDIF COMPILER6_UP}
{$IFDEF MSWINDOWS}
ShellAPI, ActiveX,
{$ENDIF MSWINDOWS}
{$IFDEF VCL}
MultiMon,
JvBrowseFolder,
{$ENDIF VCL}
JvPickDate, JvJCLUtils, JvJVCLUtils,
JvThemes, JvResources, JvConsts;
{$IFDEF MSWINDOWS}
{$R ..\Resources\JvToolEdit.res}
{$ENDIF MSWINDOWS}
{$IFDEF UNIX}
{$R ../Resources/JvToolEdit.res}
{$ENDIF UNIX}
type
TCustomEditAccessProtected = class(TCustomEdit);
TCustomFormAccessProtected = class(TCustomForm);
TWinControlAccessProtected = class(TWinControl);
{$HINTS OFF}
TCustomMaskEditAccessPrivate = class(TCustomEdit)
private
// Do not remove these fields, although they are not used.
{$IFDEF COMPILER6_UP}
FEditMask: TEditMask;
{$ELSE}
FEditMask: string;
{$ENDIF COMPILER6_UP}
FMaskBlank: Char;
FMaxChars: Integer;
FMaskSave: Boolean;
FMaskState: TMaskedState;
FCaretPos: Integer;
FBtnDownX: Integer;
FOldValue: string;
FSettingCursor: Boolean;
end;
{$HINTS ON}
const
sDirBmp = 'JvDirectoryEditGLYPH'; { Directory editor button glyph }
sFileBmp = 'JvFilenameEditGLYPH'; { Filename editor button glyph }
sDateBmp = 'JvCustomDateEditGLYPH'; { Date editor button glyph }
{$IFDEF JVCLThemesEnabled}
// (rb) should/can these be put in a separate resource file?
sDirXPBmp = 'JvDirectoryEditXPGLYPH';
sFileXPBmp = 'JvFilenameEditXPGLYPH';
{$ENDIF JVCLThemesEnabled}
{$IFDEF VCL}
const
ACLO_NONE = 0; // don't enumerate anything
ACLO_CURRENTDIR = 1; // enumerate current directory
ACLO_MYCOMPUTER = 2; // enumerate MyComputer
ACLO_DESKTOP = 4; // enumerate Desktop Folder
ACLO_FAVORITES = 8; // enumerate Favorites Folder
ACLO_FILESYSONLY = 16; // enumerate only the file system
ACLO_FILESYSDIRS = 32; // enumerate only the file system dirs, UNC shares, and UNC servers.
//IID_IAutoCompList: TGUID = (D1:$00BB2760; D2:$6A77; D3:$11D0; D4:($A5, $35, $00, $C0, $4F, $D7, $D0, $62));
//IID_IObjMgr: TGUID = (D1:$00BB2761; D2:$6A77; D3:$11D0; D4:($A5, $35, $00, $C0, $4F, $D7, $D0, $62));
//IID_IACList: TGUID = (D1:$77A130B0; D2:$94FD; D3:$11D0; D4:($A5, $44, $00, $C0, $4F, $D7, $d0, $62));
//IID_IACList2: TGUID = (D1:$470141a0; D2:$5186; D3:$11d2; D4:($bb, $b6, $00, $60, $97, $7b, $46, $4c));
//IID_ICurrentWorkingDirectory: TGUID = (D1:$91956d21; D2:$9276; D3:$11d1; D4:($92, $1a, $00, $60, $97, $df, $5b, $d4)); // {91956D21-9276-11d1-921A-006097DF5BD));
CLSID_AutoComplete: TGUID = (D1:$00BB2763; D2:$6A77; D3:$11D0; D4:($A5, $35, $00, $C0, $4F, $D7, $D0, $62));
CLSID_ACLHistory: TGUID = (D1:$00BB2764; D2:$6A77; D3:$11D0; D4:($A5, $35, $00, $C0, $4F, $D7, $D0, $62));
CLSID_ACListISF: TGUID = (D1:$03C036F1; D2:$A186; D3:$11D0; D4:($82, $4A, $00, $AA, $00, $5B, $43, $83));
CLSID_ACLMRU: TGUID = (D1:$6756a641; D2:$de71; D3:$11d0; D4:($83, $1b, $0, $aa, $0, $5b, $43, $83)); // {6756A641-DE71-11d0-831B-00AA005B438));
CLSID_ACLMulti: TGUID = (D1:$00BB2765; D2:$6A77; D3:$11D0; D4:($A5, $35, $00, $C0, $4F, $D7, $D0, $62));
//#if (_WIN32_IE >= 0x0600)
//CLSID_ACLCustomMRU: TGUID = (D1:$6935db93; D2:$21e8; D3:$4ccc; D4:($be, $b9, $9f, $e3, $c7, $7a, $29, $7a));
//#endif
type
IACList = interface(IUnknown)
['{77A130B0-94FD-11D0-A544-00C04FD7d062}']
function Expand(pszExpand: POleStr): HRESULT; stdcall;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -