cxspinbutton.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 561 行 · 第 1/2 页
PAS
561 行
{********************************************************************}
{ }
{ 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 cxSpinButton;
{$I cxVer.inc}
interface
uses
{$IFDEF DELPHI6}
Variants,
{$ENDIF}
Windows, Classes, Controls, Forms, Graphics, Messages, StdCtrls, SysUtils,
cxClasses, cxContainer, cxControls, cxCustomData, cxEdit, cxExtEditConsts,
cxExtEditUtils, cxGraphics, cxMaskEdit, cxSpinEdit, cxTextEdit, cxVariants;
type
{ TcxSpinButtonViewData }
TcxCustomSpinButtonProperties = class;
TcxSpinButtonViewData = class(TcxSpinEditViewData)
private
function GetProperties: TcxCustomSpinButtonProperties;
protected
function CanPressButton(AViewInfo: TcxCustomEditViewInfo; AButtonVisibleIndex: Integer):
Boolean; override;
function IsButtonPressed(AViewInfo: TcxCustomEditViewInfo; AButtonVisibleIndex:
Integer): Boolean; override;
public
PressedState: TcxSpinEditPressedState;
procedure Calculate(ACanvas: TcxCanvas; const ABounds: TRect; const P: TPoint;
Button: TcxMouseButton; Shift: TShiftState; AViewInfo: TcxCustomEditViewInfo;
AIsMouseEvent: Boolean); override;
property Properties: TcxCustomSpinButtonProperties read GetProperties;
end;
{ TcxCustomSpinButtonProperties }
TcxCustomSpinButton = class;
TcxCustomSpinButtonProperties = class(TcxCustomSpinEditProperties)
protected
class function GetViewDataClass: TcxCustomEditViewDataClass; override;
function IsDisplayValueNumeric: Boolean; override;
function IsEditValueNumeric: Boolean; override;
function PreserveSelection: Boolean; override;
public
constructor Create(AOwner: TPersistent); override;
class function GetContainerClass: TcxContainerClass; override;
end;
{ TcxSpinButtonProperties }
TcxSpinButtonProperties = class(TcxCustomSpinButtonProperties)
published
property Alignment;
property AssignedValues;
property AutoSelect;
property BeepOnError;
property HideSelection;
property ImmediatePost;
property Increment;
property LargeIncrement;
property MaxValue;
property MinValue;
property ReadOnly;
property SpinButtons;
property UseCtrlIncrement;
property UseLeftAlignmentOnEditing;
property ValueType default vtInt;
property OnChange;
property OnEditValueChanged;
end;
{ TcxSpinButtonControlHook }
TcxSpinButtonControlHook = class(TcxControlHook)
private
FParent: TWinControl;
protected
procedure HookWndProc(var AMsg: TMessage); override;
public
destructor Destroy; override;
end;
{ TcxCustomSpinButton }
TcxCustomSpinButton = class(TcxCustomSpinEdit)
private
FAssociate: TWinControl;
FAutoWidth: Boolean;
FSpinButtonControlHook: TcxSpinButtonControlHook;
function GetActiveProperties: TcxCustomSpinButtonProperties;
function GetProperties: TcxCustomSpinButtonProperties;
procedure SetAssociate(AValue: TWinControl);
procedure SetAutoWidth(Value: Boolean);
procedure SetProperties(Value: TcxCustomSpinButtonProperties);
protected
procedure InternalSetEditValue(const Value: TcxEditValue;
AValidateEditValue: Boolean); override;
procedure InternalSetDisplayValue(const Value: TcxEditValue); override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
function CanFocusOnClick: Boolean; override;
procedure SetSize; override;
procedure Initialize; override;
function InternalDoEditing: Boolean; override;
procedure JoinToAssociate; virtual;
procedure SetAssociateText(const AValue: Variant); virtual;
function GetValue: Variant; override;
procedure SynchronizeEditValueFromAssociate; virtual;
property Associate: TWinControl read FAssociate write SetAssociate;
property AutoWidth: Boolean read FAutoWidth write SetAutoWidth default True;
property TabStop default False;
public
destructor Destroy; override;
class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
function Increment(AButton: TcxSpinEditButton): Boolean; override;
property ActiveProperties: TcxCustomSpinButtonProperties read GetActiveProperties;
property Properties: TcxCustomSpinButtonProperties read GetProperties
write SetProperties;
end;
{ TcxSpinButton }
TcxSpinButton = class(TcxCustomSpinButton)
private
function GetActiveProperties: TcxSpinButtonProperties;
function GetProperties: TcxSpinButtonProperties;
procedure SetProperties(Value: TcxSpinButtonProperties);
public
class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
property ActiveProperties: TcxSpinButtonProperties read GetActiveProperties;
published
property Anchors;
property Associate;
property AutoSize;
property AutoWidth;
property BeepOnEnter;
property Constraints;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property ParentColor;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property Properties: TcxSpinButtonProperties read GetProperties
write SetProperties;
property ShowHint;
property Style;
property StyleDisabled;
property StyleFocused;
property StyleHot;
property TabOrder;
property TabStop;
property Value;
property Visible;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEditing;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseEnter;
property OnMouseLeave;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
end;
implementation
uses
cxEditConsts, cxEditUtils, dxThemeConsts, dxThemeManager;
type
TWinControlAccess = class(TWinControl);
{ TcxSpinButtonControlHook }
destructor TcxSpinButtonControlHook.Destroy;
begin
FParent := nil;
inherited Destroy;
end;
procedure TcxSpinButtonControlHook.HookWndProc(var AMsg: TMessage);
var
AKey: Longint;
begin
if Assigned(WinControl) and not IsDestroying and
((AMsg.Msg = WM_KEYDOWN) or (AMsg.Msg = WM_KEYUP)) then
begin
AKey := AMsg.WParam;
if (FParent <> nil) and (AKey in [VK_UP, VK_DOWN, VK_NEXT, VK_PRIOR]) then
PostMessage(FParent.Handle, AMsg.Msg, AKey, AMsg.LParam);
end;
inherited HookWndProc(AMsg);
end;
{ TcxSpinButtonViewData }
procedure TcxSpinButtonViewData.Calculate(ACanvas: TcxCanvas; const ABounds: TRect;
const P: TPoint; Button: TcxMouseButton; Shift: TShiftState; AViewInfo: TcxCustomEditViewInfo;
AIsMouseEvent: Boolean);
begin
inherited Calculate(ACanvas, ABounds, P, Button, Shift, AViewInfo, AIsMouseEvent);
TcxSpinEditViewInfo(AViewInfo).Text := '';
end;
function TcxSpinButtonViewData.CanPressButton(AViewInfo: TcxCustomEditViewInfo;
AButtonVisibleIndex: Integer): Boolean;
begin
Result := inherited CanPressButton(AViewInfo, AButtonVisibleIndex);
end;
function TcxSpinButtonViewData.IsButtonPressed(AViewInfo: TcxCustomEditViewInfo;
AButtonVisibleIndex: Integer): Boolean;
begin
Result := inherited IsButtonPressed(AViewInfo, AButtonVisibleIndex);
end;
function TcxSpinButtonViewData.GetProperties: TcxCustomSpinButtonProperties;
begin
Result := TcxCustomSpinButtonProperties(FProperties);
end;
{ TcxCustomSpinButtonProperties }
constructor TcxCustomSpinButtonProperties.Create(AOwner: TPersistent);
begin
inherited Create(AOwner);
HideCursor := True;
end;
class function TcxCustomSpinButtonProperties.GetContainerClass: TcxContainerClass;
begin
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?