cxsplitter.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,764 行 · 第 1/5 页
PAS
1,764 行
{********************************************************************}
{ }
{ 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 cxSplitter;
{$I cxVer.inc}
interface
uses
Windows, Classes, Controls, Forms, Graphics, Messages, SysUtils, cxClasses,
cxControls, cxExtEditConsts, cxExtEditUtils, cxGraphics, cxLookAndFeels;
type
TcxPositionAfterOpen = 2..High(Integer);
TcxSplitterAlign = (salBottom, salLeft, salRight, salTop);
TcxSplitterDragState = (sstNormal, sstResizing, sstHotZoneClick);
TcxSplitterMouseState = (smsClicked, smsInHotZone);
TcxSplitterMouseStates = set of TcxSplitterMouseState;
TcxSplitterState = (ssOpened, ssClosed);
TcxSplitterDirection = (cxsdLeftToRight, cxsdRightToLeft, cxsdTopToBottom, cxsdBottomToTop);
TCanResizeEvent = procedure(Sender: TObject; var NewSize: Integer; var Accept: Boolean) of object;
TBeforeOpenHotZoneEvent = procedure(Sender: TObject;
var NewSize: Integer; var AllowOpen: Boolean) of object;
TBeforeCloseHotZoneEvent = procedure(Sender: TObject; var AllowClose: Boolean) of object;
type
TcxCustomSplitter = class;
{ TcxHotZoneStyle }
TcxHotZoneStyle = class(TPersistent)
private
FOwner: TcxCustomSplitter;
FSizePercent: TcxNaturalNumber;
FVisible: Boolean;
FHotZoneRect: TRect;
procedure SetSizePercent(Value: TcxNaturalNumber);
procedure SetVisible(Value: Boolean);
protected
procedure Changed; virtual;
function SplitterDirection: TcxSplitterDirection; virtual;
function CalculateHotZoneRect(const ABounds: TRect): TRect; virtual;
function GetMinSize: TcxNaturalNumber; virtual;
function GetMaxSize: TcxNaturalNumber; virtual;
function DrawHotZone(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean): TRect; virtual;
procedure DrawBackground(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean); virtual;
public
constructor Create(AOwner: TcxCustomSplitter); virtual;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
property SizePercent: TcxNaturalNumber read FSizePercent write SetSizePercent default 30;
property Visible: Boolean read FVisible write SetVisible default True;
property HotZoneRect: TRect read FHotZoneRect write FHotZoneRect;
property Owner: TcxCustomSplitter read FOwner;
end;
TcxHotZoneStyleClass = class of TcxHotZoneStyle;
{ TcxMediaPlayer9Style }
TcxMediaPlayer9Style = class(TcxHotZoneStyle)
private
FArrowRect: TRect;
FArrowColor: TColor;
FArrowHighlightColor: TColor;
FLightColor: TColor;
FBorderColor: TColor;
FShadowStartColor: TColor;
FShadowHighlightStartColor: TColor;
procedure SetArrowColor(Value: TColor);
procedure SetArrowHighlightColor(Value: TColor);
procedure SetLightColor(Value: TColor);
procedure SetBorderColor(Value: TColor);
procedure SetShadowStartColor(Value: TColor);
procedure SetShadowHighlightStartColor(Value: TColor);
protected
function DrawHotZone(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean): TRect; override;
procedure DrawBackground(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean); override;
function CalculateHotZoneRect(const ABounds: TRect): TRect; override;
public
constructor Create(AOwner: TcxCustomSplitter); override;
procedure Assign(Source: TPersistent); override;
published
property SizePercent;
property Visible;
property ArrowColor: TColor read FArrowColor write SetArrowColor default clWindowText;
property ArrowHighlightColor: TColor read FArrowHighlightColor write SetArrowHighlightColor default clBlue;
property LightColor: TColor read FLightColor write SetLightColor default clWindow;
property BorderColor: TColor read FBorderColor write SetBorderColor default clBtnShadow;
property ShadowStartColor: TColor read FShadowStartColor write SetShadowStartColor default $00F5E6CD;
property ShadowHighlightStartColor: TColor read FShadowHighlightStartColor
write SetShadowHighlightStartColor default $00AFF5C3;
end;
{ TcxMediaPlayer8Style }
TcxMediaPlayer8Style = class(TcxHotZoneStyle)
private
FLTPointsRect: TRect;
FRBPointsRect: TRect;
FArrowRect: TRect;
FArrowColor: TColor;
FArrowHighlightColor: TColor;
FLightColor: TColor;
FShadowColor: TColor;
procedure SetArrowColor(Value: TColor);
procedure SetArrowHighlightColor(Value: TColor);
procedure SetLightColor(Value: TColor);
procedure SetShadowColor(Value: TColor);
procedure DrawArrowRect(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean);
protected
function DrawHotZone(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean): TRect; override;
procedure DrawBackground(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean); override;
function CalculateHotZoneRect(const ABounds: TRect): TRect; override;
public
constructor Create(AOwner: TcxCustomSplitter); override;
procedure Assign(Source : TPersistent); override;
published
property SizePercent;
property Visible;
property ArrowColor: TColor read FArrowColor write SetArrowColor default clWindowText;
property ArrowHighlightColor: TColor read FArrowHighlightColor write SetArrowHighlightColor default clWindow;
property LightColor: TColor read FLightColor write SetLightColor default clWindow;
property ShadowColor: TColor read FShadowColor write SetShadowColor default clBtnShadow;
end;
{ TcxXPTaskBarStyle }
TcxXPTaskBarStyle = class(TcxHotZoneStyle)
private
FLightColor: TColor;
FShadowColor: TColor;
FLTPointsRect: TRect;
FRBPointsRect: TRect;
procedure SetLightColor(Value: TColor);
procedure SetShadowColor(Value: TColor);
protected
function DrawHotZone(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean): TRect; override;
procedure DrawBackground(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean); override;
function CalculateHotZoneRect(const ABounds: TRect): TRect; override;
public
constructor Create(AOwner: TcxCustomSplitter); override;
procedure Assign(Source : TPersistent); override;
published
property SizePercent;
property Visible;
property LightColor: TColor read FLightColor write SetLightColor default clWindow;
property ShadowColor: TColor read FShadowColor write SetShadowColor default clBtnShadow;
end;
{ TcxSimpleStyle }
TcxSimpleStyle = class(TcxHotZoneStyle)
private
FArrowColor: TColor;
FArrowHighlightColor: TColor;
FLightColor: TColor;
FShadowColor: TColor;
FDotsColor: TColor;
FDotsShadowColor: TColor;
FLTArrowRect: TRect;
FRBArrowRect: TRect;
procedure SetArrowColor(Value: TColor);
procedure SetArrowHighlightColor(Value: TColor);
procedure SetLightColor(Value: TColor);
procedure SetShadowColor(Value: TColor);
procedure SetDotsColor(Value: TColor);
procedure SetDotsShadowColor(Value: TColor);
protected
function DrawHotZone(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean): TRect; override;
procedure DrawBackground(ACanvas: TcxCanvas; const ARect: TRect;
const AHighlighted, AClicked: Boolean); override;
function CalculateHotZoneRect(const ABounds: TRect): TRect; override;
public
constructor Create(AOwner: TcxCustomSplitter); override;
procedure Assign(Source : TPersistent); override;
published
property SizePercent;
property Visible;
property ArrowColor: TColor read FArrowColor write SetArrowColor default clWindowText;
property ArrowHighlightColor: TColor read FArrowHighlightColor write SetArrowHighlightColor default clWindow;
property LightColor: TColor read FLightColor write SetLightColor default clWindow;
property ShadowColor: TColor read FShadowColor write SetShadowColor default clBtnShadow;
property DotsColor: TColor read FDotsColor write SetDotsColor default clHighlight;
property DotsShadowColor: TColor read FDotsShadowColor write SetDotsShadowColor default clWindow;
end;
{TdxSplitterDragImage}
TdxSplitterDragImage = class(TcxCustomDragImage)
protected
procedure Paint; override;
end;
{ TcxCustomSplitter }
TcxCustomSplitter = class(TcxControl)
private
FActiveControl: TWinControl;
FAlignSplitter: TcxSplitterAlign;
FAllowHotZoneDrag: Boolean;
FAutoPosition: Boolean;
FAutoSnap: Boolean;
FBrush: TBrush;
FControl: TControl;
FDragImage: TdxSplitterDragImage;
FDragThreshold: TcxNaturalNumber;
FDrawCanvas: TcxCanvas;
FHotZone: TcxHotZoneStyle;
FHotZoneClickPoint: TPoint;
FHotZoneEvents: TNotifyEvent;
FHotZoneStyleClass: TcxHotZoneStyleClass;
FInvertDirection: Boolean;
FLastPatternDrawPosition: Integer;
FMaxSize: Word;
FMinSize: TcxNaturalNumber;
FMouseStates: TcxSplitterMouseStates;
FNativeBackground: Boolean;
FNewSize: Integer;
FOldSize: Integer;
FOnAfterClose: TNotifyEvent;
FOnAfterOpen: TNotifyEvent;
FOnBeforeClose: TBeforeCloseHotZoneEvent;
FOnBeforeOpen: TBeforeOpenHotZoneEvent;
FOnCanResize: TCanResizeEvent;
FOnMoved: TNotifyEvent;
FPositionAfterOpen: TcxPositionAfterOpen;
FPrevKeyDown: TKeyEvent;
FResizeIgnoreSnap: Boolean; //deprecated
FResizeUpdate: Boolean;
FSavedParentShowHint: Boolean;
FSavedShowHint: Boolean;
FSplit: Integer;
FSplitterClickPoint: TPoint;
FSplitterState: TcxSplitterDragState;
FState: TcxSplitterState;
procedure CalcSplitSize(X, Y: Integer; var NewSize, Split: Integer;
ACorrectWithMaxMin: Boolean = True);
procedure ControlResizing(X, Y: Integer);
function FindControl: TControl;
procedure FocusKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
function GetMaxControlSize: Integer;
function IsAllControlHotZoneStyle: Boolean;
procedure UpdateControlSize;
procedure UpdateSize(X, Y: Integer);
function GetDragImageTopLeft: TPoint;
procedure InitDragImage;
procedure MoveDragImage;
procedure ReleaseDragImage;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure SetAlignSplitter(Value: TcxSplitterAlign);
procedure SetSplitterState(Value: TcxSplitterState);
procedure SetAllowHotZoneDrag(Value: Boolean);
procedure SetInvertDirection(Value: Boolean);
procedure SetHotZone(Value: TcxHotZoneStyle);
procedure SetNativeBackground(Value: Boolean);
procedure SetDefaultStates;
procedure RecalcLastPosition;
procedure NormalizeSplitterSize;
procedure SetHotZoneStyleClass(const Value: TcxHotZoneStyleClass);
function GetHotZoneClassName: string;
procedure SetHotZoneClassName(Value: string);
procedure InitResize(X, Y: Integer);
procedure WMCancelMode(var Message: TWMCancelMode); message WM_CANCELMODE;
procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
protected
{ Protected declarations }
FDrawBitmap: TBitmap;
FPositionBeforeClose: Integer;
function CanFocusOnClick: Boolean; override;
function CanResize(var NewSize: Integer): Boolean; reintroduce; virtual;
function DoCanResize(var NewSize: Integer): Boolean; virtual;
procedure LookAndFeelChanged(Sender: TcxLookAndFeel;
AChangedValues: TcxLookAndFeelValues); 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 HotZoneStyleChanged; virtual;
procedure DrawHotZone; virtual;
procedure Paint; override;
procedure StopSizing; virtual;
function GetSplitterMinSize: TcxNaturalNumber; virtual;
function GetSplitterMaxSize: TcxNaturalNumber; virtual;
procedure CreateHotZone; virtual;
procedure DestroyHotZone; virtual;
procedure DoEventBeforeOpen(var ANewSize: Integer;
var AllowOpenHotZone: Boolean); virtual;
procedure DoEventAfterOpen; virtual;
procedure DoEventBeforeClose(var AllowCloseHotZone: Boolean); virtual;
procedure DoEventAfterClose; virtual;
procedure DoEventMoved; virtual;
function InternalGetMinSize: Integer;
procedure Notification(ACOmponent: TComponent; Operation: TOperation); override;
procedure Loaded; override;
function CalculateSplitterDirection: TcxSplitterDirection; virtual;
procedure UpdateMouseStates(X, Y: Integer); virtual;
property AlignSplitter: TcxSplitterAlign read FAlignSplitter
write SetAlignSplitter default salLeft;
property AutoPosition: Boolean read FAutoPosition write FAutoPosition default True;
property AutoSnap: Boolean read FAutoSnap write FAutoSnap default False;
property AllowHotZoneDrag: Boolean read FAllowHotZoneDrag write SetAllowHotZoneDrag default True;
property DragThreshold: TcxNaturalNumber read FDragThreshold write FDragThreshold default 3;
property InvertDirection: Boolean read FInvertDirection
write SetInvertDirection default False;
property MinSize: TcxNaturalNumber read FMinSize write FMinSize default 30;
property PositionAfterOpen: TcxPositionAfterOpen read FPositionAfterOpen
write FPositionAfterOpen default 30;
property ResizeUpdate: Boolean read FResizeUpdate
write FResizeUpdate default False;
property ResizeIgnoreSnap: Boolean read FResizeIgnoreSnap
write FResizeIgnoreSnap stored False; //deprecated
property Control: TControl read FControl write FControl;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?