cxtextedit.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,593 行 · 第 1/5 页
PAS
1,593 行
{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressEditors }
{ }
{ Copyright (c) 1998-2008 Developer Express Inc. }
{ ALL RIGHTS RESERVED }
{ }
{ The entire contents of this file is protected by U.S. and }
{ International Copyright Laws. Unauthorized reproduction, }
{ reverse-engineering, and distribution of all or any portion of }
{ the code contained in this file is strictly prohibited and may }
{ result in severe civil and criminal penalties and will be }
{ prosecuted to the maximum extent possible under the law. }
{ }
{ RESTRICTIONS }
{ }
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
{ LICENSED TO DISTRIBUTE THE EXPRESSEDITORS AND ALL }
{ ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{ }
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
{ }
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
{ ADDITIONAL RESTRICTIONS. }
{ }
{********************************************************************}
unit cxTextEdit;
{$I cxVer.inc}
interface
uses
Windows, Messages,
{$IFDEF DELPHI6}
Variants,
{$ENDIF}
Classes, Clipbrd, Controls, Forms, Graphics, Menus, StdCtrls, SysUtils, cxClasses,
cxContainer, cxControls, cxDataUtils, cxEdit, cxDrawTextUtils, cxFormats,
cxGraphics, cxVariants, cxFilterControlUtils;
const
cxEditDefaultDropDownPageRowCount = 8;
ekValueOutOfBounds = 1;
type
TcxEditEchoMode = (eemNormal, eemPassword);
TcxEditScrollCause = (escKeyboard, escMouseWheel);
TcxEditValueBound = (evbMin, evbMax);
TcxTextEditViewStyle = (vsNormal, vsHideCursor, vsButtonsOnly, vsButtonsAutoWidth);
TcxTextEditCustomDrawHandler = procedure(ACanvas: TcxCanvas; ARect: TRect) of object;
TcxCustomTextEdit = class;
IcxInnerTextEdit = interface(IcxCustomInnerEdit)
['{263EBB8D-1EA9-4CAC-8367-ADD74D2A9651}']
procedure ClearSelection;
procedure CopyToClipboard;
function GetAlignment: TAlignment;
function GetAutoSelect: Boolean;
function GetCharCase: TEditCharCase;
function GetEchoMode: TcxEditEchoMode;
function GetFirstVisibleCharIndex: Integer;
function GetHideSelection: Boolean;
function GetImeLastChar: Char;
function GetImeMode: TImeMode;
function GetImeName: TImeName;
function GetInternalUpdating: Boolean;
function GetMaxLength: Integer;
function GetMultiLine: Boolean;
function GetOEMConvert: Boolean;
function GetOnSelChange: TNotifyEvent;
function GetPasswordChar: TCaptionChar;
function GetSelLength: Integer;
function GetSelStart: Integer;
function GetSelText: string;
procedure SelectAll;
procedure SetAlignment(Value: TAlignment);
procedure SetAutoSelect(Value: Boolean);
procedure SetCharCase(Value: TEditCharCase);
procedure SetEchoMode(Value: TcxEditEchoMode);
procedure SetHideSelection(Value: Boolean);
procedure SetInternalUpdating(Value: Boolean);
procedure SetImeMode(Value: TImeMode);
procedure SetImeName(const Value: TImeName);
procedure SetMaxLength(Value: Integer);
procedure SetOEMConvert(Value: Boolean);
procedure SetOnSelChange(Value: TNotifyEvent);
procedure SetPasswordChar(Value: TCaptionChar);
procedure SetSelLength(Value: Integer);
procedure SetSelStart(Value: Integer);
procedure SetSelText(Value: string);
property Alignment: TAlignment read GetAlignment write SetAlignment;
property AutoSelect: Boolean read GetAutoSelect write SetAutoSelect;
property CharCase: TEditCharCase read GetCharCase write SetCharCase;
property EchoMode: TcxEditEchoMode read GetEchoMode write SetEchoMode;
property HideSelection: Boolean read GetHideSelection write SetHideSelection;
property ImeLastChar: Char read GetImeLastChar;
property ImeMode: TImeMode read GetImeMode write SetImeMode;
property ImeName: TImeName read GetImeName write SetImeName;
property InternalUpdating: Boolean read GetInternalUpdating write SetInternalUpdating;
property MaxLength: Integer read GetMaxLength write SetMaxLength;
property MultiLine: Boolean read GetMultiLine;
property OEMConvert: Boolean read GetOEMConvert write SetOEMConvert;
property PasswordChar: TCaptionChar read GetPasswordChar write SetPasswordChar;
property SelLength: Integer read GetSelLength write SetSelLength;
property SelStart: Integer read GetSelStart write SetSelStart;
property SelText: string read GetSelText write SetSelText;
property OnSelChange: TNotifyEvent read GetOnSelChange write SetOnSelChange;
end;
{ TcxCustomInnerTextEditHelper }
TcxCustomInnerTextEdit = class;
TcxCustomInnerTextEditHelper = class(TcxInterfacedPersistent,
IcxContainerInnerControl, IcxCustomInnerEdit, IcxInnerTextEdit)
private
FAlignmentLock: Boolean;
FEdit: TcxCustomInnerTextEdit;
FSelLength: Integer;
FSelStart: Integer;
function GetUseLeftAlignmentOnEditing: Boolean;
protected
property Edit: TcxCustomInnerTextEdit read FEdit;
property UseLeftAlignmentOnEditing: Boolean read GetUseLeftAlignmentOnEditing;
public
constructor Create(AEdit: TcxCustomInnerTextEdit); reintroduce; virtual;
// IcxContainerInnerControl
function GetControlContainer: TcxContainer;
function GetControl: TWinControl;
// IcxCustomInnerEdit
function CallDefWndProc(AMsg: UINT; WParam: WPARAM;
LParam: LPARAM): LRESULT;
function GetEditValue: TcxEditValue;
function GetOnChange: TNotifyEvent;
procedure LockBounds(ALock: Boolean);
procedure SafelySetFocus;
procedure SetEditValue(const Value: TcxEditValue);
procedure SetParent(Value: TWinControl);
procedure SetOnChange(Value: TNotifyEvent);
// IcxInnerTextEdit
procedure ClearSelection;
procedure CopyToClipboard;
function GetAlignment: TAlignment;
function GetAutoSelect: Boolean;
function GetCharCase: TEditCharCase;
function GetEchoMode: TcxEditEchoMode;
function GetFirstVisibleCharIndex: Integer;
function GetHideSelection: Boolean;
function GetImeLastChar: Char;
function GetImeMode: TImeMode;
function GetImeName: TImeName;
function GetInternalUpdating: Boolean;
function GetIsInplace: Boolean;
function GetMaxLength: Integer;
function GetMultiLine: Boolean;
function GetOEMConvert: Boolean;
function GetOnSelChange: TNotifyEvent;
function GetPasswordChar: TCaptionChar;
function GetReadOnly: Boolean;
function GetSelLength: Integer;
function GetSelStart: Integer;
function GetSelText: string;
procedure SelectAll;
procedure SetAlignment(Value: TAlignment);
procedure SetAutoSelect(Value: Boolean);
procedure SetCharCase(Value: TEditCharCase);
procedure SetEchoMode(Value: TcxEditEchoMode);
procedure SetHideSelection(Value: Boolean);
procedure SetInternalUpdating(Value: Boolean);
procedure SetImeMode(Value: TImeMode);
procedure SetImeName(const Value: TImeName);
procedure SetMaxLength(Value: Integer);
procedure SetOEMConvert(Value: Boolean);
procedure SetOnSelChange(Value: TNotifyEvent);
procedure SetPasswordChar(Value: TCaptionChar);
procedure SetReadOnly(Value: Boolean);
procedure SetSelLength(Value: Integer);
procedure SetSelStart(Value: Integer);
procedure SetSelText(Value: string);
end;
{ TcxCustomInnerTextEdit }
TcxCustomInnerTextEditPrevState = record
IsPrevTextSaved: Boolean;
PrevText: string;
PrevSelLength, PrevSelStart: Integer;
end;
TcxCustomInnerTextEdit = class(TCustomEdit, IUnknown,
IcxContainerInnerControl, IcxInnerEditHelper)
private
FAlignment: TAlignment;
FEchoMode: TcxEditEchoMode;
FDblClickLock: Boolean;
FDblClickTimer: TcxTimer;
FHelper: TcxCustomInnerTextEditHelper;
FImeCharCount: Integer;
FImeLastChar: Char;
FInternalUpdating: Boolean;
FIsCreating: Boolean;
FLockBoundsCount: Integer;
FPasswordChar: TCaptionChar;
FRepaintOnGlass: Boolean;
FOnSelChange: TNotifyEvent;
procedure DblClickTimerHandle(Sender: TObject);
function GetContainer: TcxCustomTextEdit;
function GetCursorPos: Integer;
function GetIsDestroying: Boolean;
procedure InitializeDblClickTimer;
function NeadAdjustAlignment: Boolean;
procedure UpdateEchoMode;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure EMSetSel(var Message: TMessage); message EM_SETSEL;
procedure WMChar(var Message: TWMChar); message WM_CHAR;
procedure WMClear(var Message: TMessage); message WM_CLEAR;
procedure WMCut(var Message: TMessage); message WM_CUT;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMIMEChar(var Message: TMessage); message WM_IME_CHAR;
procedure WMIMEComposition(var Message: TMessage); message WM_IME_COMPOSITION;
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT;
procedure WMPaste(var Message: TMessage); message WM_PASTE;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMUndo(var Message: TWMSize); message WM_UNDO;
protected
procedure AdjustAlignment; virtual;
procedure Change; override; // for Delphi .NET
procedure Click; override;
procedure CreateHandle; override;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWindowHandle(const Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DblClick; override;
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean; override;
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
var Accept: Boolean); override;
function GetBasedAlignment: TAlignment;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure KeyUp(var Key: Word; Shift: TShiftState); 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;
procedure WndProc(var Message: TMessage); override;
procedure AdjustMargins; virtual;
procedure MouseEnter(AControl: TControl); dynamic;
procedure MouseLeave(AControl: TControl); dynamic;
procedure RecreateWnd; // for Delphi .NET
// IcxContainerInnerControl
function GetControl: TWinControl;
function GetControlContainer: TcxContainer;
// IcxInnerEditHelper
function GetHelper: IcxCustomInnerEdit;
property Alignment: TAlignment read FAlignment;
property Container: TcxCustomTextEdit read GetContainer;
property CursorPos: Integer read GetCursorPos;
property Helper: TcxCustomInnerTextEditHelper read FHelper;
property IsDestroying: Boolean read GetIsDestroying;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DragDrop(Source: TObject; X, Y: Integer); override;
function ExecuteAction(Action: TBasicAction): Boolean; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
{$IFDEF DELPHI5}
function CanFocus: Boolean; override;
{$ENDIF}
procedure DefaultHandler(var Message); override;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
property AutoSelect;
property CharCase;
property HideSelection;
property ImeMode;
property ImeName;
property MaxLength;
property OEMConvert;
property ReadOnly;
property OnChange;
property OnSelChange: TNotifyEvent read FOnSelChange write FOnSelChange;
end;
{ TcxTextEditPropertiesValues }
TcxTextEditPropertiesValues = class(TcxCustomEditPropertiesValues)
private
FDisplayFormat: Boolean;
FEditFormat: Boolean;
FMaxLength: Boolean;
function IsDisplayFormatStored: Boolean;
function IsEditFormatStored: Boolean;
procedure SetDisplayFormat(Value: Boolean);
procedure SetEditFormat(Value: Boolean);
procedure SetMaxLength(Value: Boolean);
public
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?