📄 cxcontrols.pas
字号:
{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ Express Cross Platform Library controls }
{ }
{ Copyright (c) 2000-2009 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 EXPRESSCROSSPLATFORMLIBRARY 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. }
{ }
{********************************************************************}
{$DEFINE USETCXSCROLLBAR}
unit cxControls;
{$I cxVer.inc}
interface
uses
Windows, Messages,
{$IFDEF DELPHI6}
Types,
{$ENDIF}
Controls, Graphics, Dialogs, Forms, Classes, StdCtrls, Menus, cxGraphics,
{$IFDEF USETCXSCROLLBAR}
cxScrollBar,
{$ENDIF}
cxClasses,
cxLookAndFeels,
cxLookAndFeelPainters;
// , dxCore;
const
CM_NCSIZECHANGED = WM_DX + 1;
WM_SYNCHRONIZETHREADS = WM_DX + 2;
{$IFNDEF DELPHI7}
WM_APPCOMMAND = $0319;
{$EXTERNALSYM WM_APPCOMMAND}
{$ENDIF}
FAPPCOMMAND_MASK = $0000F000;
{$EXTERNALSYM FAPPCOMMAND_MASK}
APPCOMMAND_BROWSER_BACKWARD = 1;
{$EXTERNALSYM APPCOMMAND_BROWSER_BACKWARD}
APPCOMMAND_BROWSER_FORWARD = 2;
{$EXTERNALSYM APPCOMMAND_BROWSER_FORWARD}
type
TcxHandle = HWND;
TcxDragDetect = (ddNone, ddDrag, ddCancel);
TcxNumberType = (ntInteger, ntFloat, ntExponent);
{$IFNDEF DELPHI7}
TWMPrint = packed record
Msg: Cardinal;
DC: HDC;
Flags: Cardinal;
Result: Integer;
end;
TWMPrintClient = TWMPrint;
{$ENDIF}
TLBGetItemRect = packed record
Msg: Cardinal;
ItemIndex: Integer;
Rect: PRect;
Result: Longint;
end;
TcxControl = class;
TDragControlObjectClass = class of TDragControlObject;
IdxSpellChecker = interface
['{4515FCEE-2D09-4709-A170-E29C556355BF}']
procedure CheckFinish;
procedure CheckStart(AControl: TWinControl);
procedure DrawMisspellings(AControl: TWinControl);
function IsSpellCheckerDialogControl(AWnd: THandle): Boolean;
procedure KeyPress(AKey: Char);
procedure LayoutChanged(AControl: TWinControl);
function QueryPopup(APopup: TComponent; const P: TPoint): Boolean;
procedure SelectionChanged(AControl: TWinControl);
procedure TextChanged(AControl: TWinControl);
procedure Undo;
end;
IdxSpellCheckerControl = interface
['{2DEA4CCA-3C6D-4283-9441-AABBD61F74F3}']
function SupportsSpelling: Boolean;
procedure SetSelText(const AText: string; APost: Boolean = False);
procedure SetIsBarControl(AValue: Boolean);
procedure SetValue(const AValue: Variant);
end;
TdxSpellCheckerAutoCorrectWordRange = record
Replacement: WideString;
SelStart: Integer;
SelLength: Integer;
NewSelStart: Integer;
end;
PdxSpellCheckerAutoCorrectWordRange = ^TdxSpellCheckerAutoCorrectWordRange;
IcxMouseCaptureObject = interface
['{ACB73657-6066-4564-9A3D-D4D0273AA82F}']
procedure DoCancelMode;
end;
IcxMouseTrackingCaller = interface
['{84A4BCBE-E001-4D60-B7A6-75E2B0DCD3E9}']
procedure MouseLeave;
end;
IcxMouseTrackingCaller2 = interface(IcxMouseTrackingCaller)
['{3A5D973B-F016-4F22-80B6-1D35668D7743}']
function PtInCaller(const P: TPoint): Boolean;
end;
{ IcxCompoundControl }
IcxCompoundControl = interface
['{A4A77F28-1D03-425B-9A83-0B853B5D8DEF}']
function GetActiveControl: TWinControl;
property ActiveControl: TWinControl read GetActiveControl;
end;
{ IcxPopupMenu }
IcxPopupMenu = interface
['{61EEDA7D-88CC-45BF-8A00-5C25174D6501}']
function IsShortCutKey(var Message: TWMKey): Boolean;
procedure Popup(X, Y: Integer);
end;
{ control child component }
TcxControlChildComponent = class(TcxComponent)
private
FControl: TcxControl;
function GetIsLoading: Boolean;
protected
function GetIsDestroying: Boolean; virtual;
procedure Initialize; virtual;
procedure SetControl(Value: TcxControl); virtual;
public
constructor Create(AOwner: TComponent); override;
constructor CreateEx(AControl: TcxControl;
AAssignOwner: Boolean = True); virtual;
destructor Destroy; override;
function GetParentComponent: TComponent; override;
function HasParent: Boolean; override;
procedure SetParentComponent(Value: TComponent); override;
property Control: TcxControl read FControl write SetControl;
property IsDestroying: Boolean read GetIsDestroying;
property IsLoading: Boolean read GetIsLoading;
end;
{ scrollbar and size grip }
TcxScrollBarData = record
Min: Integer;
Max: Integer;
Position: Integer;
PageSize: Integer;
SmallChange: TScrollBarInc;
LargeChange: TScrollBarInc;
Enabled: Boolean;
Visible: Boolean;
AllowShow: Boolean;
AllowHide: Boolean;
end;
TcxControlScrollBar = class({$IFDEF USETCXSCROLLBAR}TcxScrollBar{$ELSE}TScrollBar{$ENDIF})
private
function GetVisible: Boolean;
procedure SetVisible(Value: Boolean);
procedure CMDesignHitTest(var Message: TCMDesignHitTest); message CM_DESIGNHITTEST;
protected
procedure WndProc(var Message: TMessage); override;
procedure FocusParent; virtual;
public
Data: TcxScrollBarData;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ApplyData;
property Visible: Boolean read GetVisible write SetVisible;
end;
TcxSizeGrip = class(TCustomControl)
private
FLookAndFeel: TcxLookAndFeel;
procedure WMEraseBkgnd(var AMessage: TWMEraseBkgnd); message WM_ERASEBKGND;
protected
procedure LookAndFeelChanged(Sender: TcxLookAndFeel; AChangedValues: TcxLookAndFeelValues);
procedure Paint; override;
property LookAndFeel: TcxLookAndFeel read FLookAndFeel;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
{ drag & drop objects }
TcxDragAndDropObjectClass = class of TcxDragAndDropObject;
TcxDragAndDropObject = class
private
FCanvas: TcxCanvas;
FControl: TcxControl;
FDirty: Boolean;
procedure SetDirty(Value: Boolean);
protected
procedure ChangeMousePos(const P: TPoint);
procedure DirtyChanged; virtual;
function GetDragAndDropCursor(Accepted: Boolean): TCursor; virtual;
function GetImmediateStart: Boolean; virtual;
procedure AfterDragAndDrop(Accepted: Boolean); virtual;
procedure BeginDragAndDrop; virtual;
procedure DragAndDrop(const P: TPoint; var Accepted: Boolean); virtual;
procedure EndDragAndDrop(Accepted: Boolean); virtual;
property Canvas: TcxCanvas read FCanvas write FCanvas;
property Control: TcxControl read FControl;
property Dirty: Boolean read FDirty write SetDirty;
public
CurMousePos: TPoint;
PrevMousePos: TPoint;
constructor Create(AControl: TcxControl); virtual;
procedure DoBeginDragAndDrop;
procedure DoDragAndDrop(const P: TPoint; var Accepted: Boolean);
procedure DoEndDragAndDrop(Accepted: Boolean);
property ImmediateStart: Boolean read GetImmediateStart;
end;
TcxDragControlObject = class(TDragControlObject)
protected
procedure Finished(Target: TObject; X, Y: Integer; Accepted: Boolean); override;
function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; override;
end;
TcxDragImageListClass = class of TcxDragImageList;
TcxDragImageList = class(TDragImageList);
{ control }
TcxControlBorderStyle = (cxcbsNone, cxcbsDefault);
TcxDragAndDropState = (ddsNone, ddsStarting, ddsInProcess);
TcxKey = (kAll, kArrows, kChars, kTab);
TcxKeys = set of TcxKey;
TcxMouseWheelScrollingKind = (mwskNone, mwskHorizontal, mwskVertical);
TcxControlListernerLink = class
Ref: TcxControl;
end;
TcxControl = class(TCustomControl{$IFNDEF DELPHI6}, IUnknown{$ENDIF},
IcxLookAndFeelContainer {, IdxLocalizerListener})
private
FActiveCanvas: TcxCanvas;
FBorderStyle: TcxControlBorderStyle;
FCalculatingScrollBarsParams: Boolean;
FCanvas: TcxCanvas;
FCreatingWindow: Boolean;
FDefaultCursor: TCursor;
FDragAndDropObject: TcxDragAndDropObject;
FDragAndDropObjectClass: TcxDragAndDropObjectClass;
FDragAndDropPrevCursor: TCursor;
FDragAndDropState: TcxDragAndDropState;
FDragImages: TcxDragImageList;
FFinishingDragAndDrop: Boolean;
FFocusOnClick: Boolean;
FFontListenerList: IInterfaceList;
FHScrollBar: TcxControlScrollBar;
FInitialHScrollBarVisible: Boolean;
FInitialVScrollBarVisible: Boolean;
FIsInitialScrollBarsParams: Boolean;
FKeys: TcxKeys;
FLookAndFeel: TcxLookAndFeel;
FMouseButtonPressed: Boolean;
FMouseCaptureObject: TObject;
FMouseDownPos: TPoint;
FMouseRightButtonReleased: Boolean;
FPopupMenu: TComponent;
FScrollBars: TScrollStyle;
FScrollBarsLockCount: Integer;
FScrollBarsUpdateNeeded: Boolean;
FSizeGrip: TcxSizeGrip;
FUpdatingScrollBars: Boolean;
FVScrollBar: TcxControlScrollBar;
FIsScrollingContent: Boolean;
FLastParentBackground: Boolean;
{$IFNDEF DELPHI7}
FParentBackground: Boolean;
{$ENDIF}
FOnFocusChanged: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
function GetActiveCanvas: TcxCanvas;
function GetDragAndDropObject: TcxDragAndDropObject;
function GetHScrollBarVisible: Boolean;
function GetIsDestroying: Boolean;
function GetIsLoading: Boolean;
function GetVScrollBarVisible: Boolean;
procedure SetBorderStyle(Value: TcxControlBorderStyle);
procedure SetDragAndDropState(Value: TcxDragAndDropState);
procedure SetLookAndFeel(Value: TcxLookAndFeel);
procedure SetKeys(Value: TcxKeys);
procedure SetMouseCaptureObject(Value: TObject);
procedure SetPopupMenu(Value: TComponent);
procedure SetScrollBars(Value: TScrollStyle);
{$IFNDEF DELPHI7}
procedure SetParentBackground(Value: Boolean);
{$ENDIF}
procedure WMCancelMode(var Message: TWMCancelMode); message WM_CANCELMODE;
procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
procedure CMCursorChanged(var Message: TMessage); message CM_CURSORCHANGED;
procedure CMDesignHitTest(var Message: TCMDesignHitTest); message CM_DESIGNHITTEST;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMNCSizeChanged(var Message: TMessage); message CM_NCSIZECHANGED;
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
procedure CNSysKeyDown(var Message: TWMKeyDown); message CN_SYSKEYDOWN;
procedure CreateScrollBars;
procedure DestroyScrollBars;
procedure ScrollEvent(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
protected
FBounds: TRect;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure Resize; override;
procedure WndProc(var Message: TMessage); override;
procedure DestroyWindowHandle; override;
procedure DoContextPopup(MousePos: TPoint;
var Handled: Boolean); override;
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint): Boolean; override;
function DoShowPopupMenu(AMenu: TComponent; X, Y: Integer): Boolean; virtual;
function GetPopupMenu: TPopupMenu; override;
function IsMenuKey(var Message: TWMKey): Boolean;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure Modified; virtual;
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 Notification(AComponent: TComponent; Operation: TOperation); override;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -