cxradiogroup.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 2,138 行 · 第 1/5 页
PAS
2,138 行
{********************************************************************}
{ }
{ 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 cxRadioGroup;
{$I cxVer.inc}
interface
uses
Windows,
Messages,
{$IFDEF DELPHI6}
Variants,
{$ENDIF}
Classes, Controls, Forms, Graphics, ImgList, StdCtrls, SysUtils, cxClasses,
cxContainer, cxControls, cxDataStorage, cxEdit, cxGraphics, cxLookAndFeels,
Menus, cxTextEdit, cxGroupBox, dxUxTheme, cxDropDownEdit, cxFilterControlUtils;
type
TcxRadioButtonState = (rbsDisabled, rbsHot, rbsNormal, rbsPressed);
TcxRadioGroupState = (rgsActive, rgsDisabled, rgsHot, rgsNormal);
TcxCustomRadioGroup = class;
TcxCustomRadioGroupProperties = class;
{ TcxRadioButton }
TcxRadioButton = class(TRadioButton, IUnknown,
IcxMouseTrackingCaller, IcxLookAndFeelContainer, IdxSkinSupport)
private
FButtonRect: TRect;
FCanvas: TcxCanvas;
FColumn: Integer;
FControlCanvas: TControlCanvas;
FLookAndFeel: TcxLookAndFeel;
FPopupMenu: TComponent;
FRow: Integer;
FState: TcxRadioButtonState;
FTransparent: Boolean;
{$IFNDEF DELPHI7}
FParentBackground: Boolean;
FWordWrap: Boolean;
{$ENDIF}
function GetTextColor: TColor;
procedure DrawItem(const DrawItemStruct: TDrawItemStruct);
function IsDisabledTextColorAssigned: Boolean;
function GetRadioButtonRect(const ARadioButtonSize: TSize;
ANativeStyle: Boolean): TRect;
procedure SetLookAndFeel(Value: TcxLookAndFeel);
procedure SetPopupMenu(Value: TComponent);
procedure SetState(Value: TcxRadioButtonState);
procedure SetTransparent(Value: Boolean);
{$IFNDEF DELPHI7}
procedure SetParentBackground(Value: Boolean);
procedure SetWordWrap(Value: Boolean);
{$ENDIF}
procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure WMWindowPosChanged(var Message: TWMWindowPosChanged);
message WM_WINDOWPOSCHANGED;
procedure BMSetCheck(var Message: TMessage); message BM_SETCHECK;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE;
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM;
procedure CNSysKeyDown(var Message: TWMSysKeyDown); message CN_SYSKEYDOWN;
protected
procedure CreateHandle; override;
procedure CreateParams(var Params: TCreateParams); override;
procedure DoEnter; 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 Notification(AComponent: TComponent; Operation: TOperation); override;
procedure CorrectTextRect(var R: TRect; ANativeStyle: Boolean); virtual;
procedure DoContextPopup(MousePos: TPoint;
var Handled: Boolean); {$IFNDEF DELPHI5}virtual{$ELSE}override{$ENDIF};
function DoShowPopupMenu(APopupMenu: TComponent;
X, Y: Integer): Boolean; virtual;
procedure DrawBackground; virtual;
procedure DrawCaption(ACanvas: TcxCanvas; ANativeStyle: Boolean); virtual;
procedure EnabledChanged; dynamic;
procedure InternalPolyLine(const APoints: array of TPoint);
function IsInplace: Boolean; virtual;
function IsNativeBackground: Boolean; virtual;
function IsNativeStyle: Boolean; virtual;
function IsTransparent: Boolean; virtual;
function IsTransparentBackground: Boolean; virtual;
procedure LookAndFeelChanged(Sender: TcxLookAndFeel;
AChangedValues: TcxLookAndFeelValues); virtual;
procedure MouseEnter(AControl: TControl); dynamic;
procedure MouseLeave(AControl: TControl); dynamic;
procedure Paint(ADrawOnlyFocusedState: Boolean); virtual;
procedure ShortUpdateState;
procedure UpdateState(Button: TcxMouseButton; Shift: TShiftState;
const P: TPoint); virtual;
// IcxMouseTrackingCaller
procedure IcxMouseTrackingCaller.MouseLeave = MouseTrackingCallerMouseLeave;
procedure MouseTrackingCallerMouseLeave;
// IcxLookAndFeelContainer
function GetLookAndFeel: TcxLookAndFeel;
property Canvas: TcxCanvas read FCanvas;
property Column: Integer read FColumn;
property Row: Integer read FRow;
property State: TcxRadioButtonState read FState write SetState;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Focused: Boolean; override;
procedure Invalidate; override;
published
property LookAndFeel: TcxLookAndFeel read FLookAndFeel write SetLookAndFeel;
property PopupMenu: TComponent read FPopupMenu write SetPopupMenu;
property ParentBackground{$IFNDEF DELPHI7}: Boolean read FParentBackground write SetParentBackground{$ENDIF} default True;
property Transparent: Boolean read FTransparent write SetTransparent default False;
{$IFNDEF DELPHI7}
property WordWrap: Boolean read FWordWrap write SetWordWrap default False;
{$ENDIF}
end;
{ TcxRadioGroupButtonViewInfo }
TcxRadioGroupButtonViewInfo = class(TcxGroupBoxButtonViewInfo)
public
function GetGlyphRect(ACanvas: TcxCanvas; AGlyphSize: TSize; AAlignment: TLeftRight; AIsPaintCopy: Boolean): TRect; override;
end;
{ TcxCustomRadioGroupViewInfo }
TcxCustomRadioGroupViewInfo = class(TcxButtonGroupViewInfo)
private
function GetEdit: TcxCustomRadioGroup;
function ThemeHandle: TdxTheme;
protected
procedure DrawButtonCaption(ACanvas: TcxCanvas;
AButtonViewInfo: TcxGroupBoxButtonViewInfo; const AGlyphRect: TRect); override;
procedure DrawButtonGlyph(ACanvas: TcxCanvas;
AButtonViewInfo: TcxGroupBoxButtonViewInfo; const AGlyphRect: TRect); override;
function GetButtonViewInfoClass: TcxEditButtonViewInfoClass; override;
function IsButtonGlypthTransparent(AButtonViewInfo: TcxGroupBoxButtonViewInfo): Boolean; override;
public
ItemIndex: Integer;
constructor Create; override;
property Edit: TcxCustomRadioGroup read GetEdit;
end;
{ TcxCustomRadioGroupViewData }
TcxCustomRadioGroupViewData = class(TcxButtonGroupViewData)
private
function GetProperties: TcxCustomRadioGroupProperties;
protected
procedure GetEditMetrics(AAutoHeight: Boolean; ACanvas: TcxCanvas;
out AMetrics: TcxEditMetrics); override;
procedure CalculateButtonNativeState(AViewInfo: TcxCustomEditViewInfo;
AButtonViewInfo: TcxGroupBoxButtonViewInfo); override;
public
procedure Calculate(ACanvas: TcxCanvas; const ABounds: TRect; const P: TPoint;
Button: TcxMouseButton; Shift: TShiftState; AViewInfo: TcxCustomEditViewInfo;
AIsMouseEvent: Boolean); override;
procedure EditValueToDrawValue(ACanvas: TcxCanvas; const AEditValue: TcxEditValue;
AViewInfo: TcxCustomEditViewInfo); override;
property Properties: TcxCustomRadioGroupProperties read GetProperties;
end;
{ TcxRadioGroupItem }
TcxRadioGroupItem = class(TcxButtonGroupItem)
private
FValue: TcxEditValue;
function IsValueStored: Boolean;
procedure SetValue(const Value: TcxEditValue);
public
constructor Create(Collection: TCollection); override;
procedure Assign(Source: TPersistent); override;
published
property Caption;
property Value: TcxEditValue read FValue write SetValue stored IsValueStored;
property Tag;
end;
{ TcxRadioGroupItems }
TcxRadioGroupItems = class(TcxButtonGroupItems)
private
function GetItem(Index: Integer): TcxRadioGroupItem;
procedure SetItem(Index: Integer; Value: TcxRadioGroupItem);
public
function Add: TcxRadioGroupItem;
property Items[Index: Integer]: TcxRadioGroupItem
read GetItem write SetItem; default;
end;
{ TcxCustomRadioGroupProperties }
TcxCustomRadioGroupProperties = class(TcxCustomButtonGroupProperties)
private
FDefaultCaption: WideString;
FDefaultValue: TcxEditValue;
function GetItems: TcxRadioGroupItems;
function IsDefaultCaptionStored: Boolean;
function IsDefaultValueStored: Boolean;
procedure SetDefaultValue(const Value: TcxEditValue);
procedure SetItems(Value: TcxRadioGroupItems);
protected
function CreateItems: TcxButtonGroupItems; override;
function GetColumnCount: Integer; override;
class function GetViewDataClass: TcxCustomEditViewDataClass; override;
function HasDisplayValue: Boolean; override;
public
constructor Create(AOwner: TPersistent); override;
procedure Assign(Source: TPersistent); override;
function CanCompareEditValue: Boolean; override;
function CompareDisplayValues(
const AEditValue1, AEditValue2: TcxEditValue): Boolean; override;
class function GetContainerClass: TcxContainerClass; override;
function GetDisplayText(const AEditValue: TcxEditValue;
AFullText: Boolean = False; AIsInplace: Boolean = True): WideString; override;
function GetRadioGroupItemIndex(const AEditValue: TcxEditValue): Integer;
function GetSupportedOperations: TcxEditSupportedOperations; override;
class function GetViewInfoClass: TcxContainerViewInfoClass; override;
function IsResetEditClass: Boolean; override;
procedure PrepareDisplayValue(const AEditValue: TcxEditValue;
var DisplayValue: TcxEditValue; AEditFocused: Boolean); override;
// !!!
property DefaultCaption: WideString read FDefaultCaption
write FDefaultCaption stored IsDefaultCaptionStored;
property DefaultValue: TcxEditValue read FDefaultValue write SetDefaultValue
stored IsDefaultValueStored;
property Items: TcxRadioGroupItems read GetItems write SetItems;
end;
{ TcxRadioGroupProperties }
TcxRadioGroupProperties = class(TcxCustomRadioGroupProperties)
published
property AssignedValues;
property ClearKey;
property Columns;
property DefaultCaption;
property DefaultValue;
property ImmediatePost;
property Items;
property ReadOnly;
property WordWrap;
property OnChange;
property OnEditValueChanged;
end;
{ TcxCustomRadioGroupButton }
TcxCustomRadioGroupButton = class(TcxRadioButton, IUnknown,
IcxContainerInnerControl)
private
FFocusingByMouse: Boolean;
FInternalSettingChecked: Boolean;
FIsClickLocked: Boolean;
function GetRadioGroup: TcxCustomRadioGroup;
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
protected
procedure Click; override;
procedure CorrectTextRect(var R: TRect; ANativeStyle: Boolean); override;
procedure DoEnter; override;
procedure DoExit; override;
procedure DrawBackground; override;
function IsInplace: Boolean; override;
function IsNativeBackground: Boolean; override;
function IsNativeStyle: Boolean; override;
function IsTransparent: Boolean; override;
function IsTransparentBackground: Boolean; override;
procedure KeyPress(var Key: Char); override;
procedure Paint(ADrawOnlyFocusedState: Boolean); override;
procedure SetChecked(Value: Boolean); override;
procedure WndProc(var Message: TMessage); override;
// IcxContainerInnerControl
function GetControl: TWinControl;
function GetControlContainer: TcxContainer;
procedure InternalSetChecked(AValue: Boolean);
property RadioGroup: TcxCustomRadioGroup read GetRadioGroup;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; 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;
end;
TcxCustomRadioGroupButtonClass = class of TcxCustomRadioGroupButton;
{ TcxCustomRadioGroup }
TcxCustomRadioGroup = class(TcxCustomButtonGroup)
private
FLoadedItemIndex: Integer;
FSkinsPaintCopy: Boolean;
function GetCheckedIndex: Integer;
function GetButton(Index: Integer): TcxCustomRadioGroupButton;
function GetProperties: TcxCustomRadioGroupProperties;
function GetActiveProperties: TcxCustomRadioGroupProperties;
function GetItemIndex: Integer;
function GetViewInfo: TcxCustomRadioGroupViewInfo;
procedure SetItemIndex(Value: Integer);
procedure SetProperties(Value: TcxCustomRadioGroupProperties);
procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
protected
procedure CursorChanged; override;
function GetButtonDC(AButtonIndex: Integer): THandle; override;
procedure Initialize; override;
procedure InternalSetEditValue(const Value: TcxEditValue;
AValidateEditValue: Boolean); override;
function IsContainerFocused: Boolean; override;
function IsDBEditPaintCopyDrawing: Boolean; override;
function IsInternalControl(AControl: TControl): Boolean; override;
procedure SetDragMode(Value: TDragMode); override;
procedure SetInternalValues(const AEditValue: TcxEditValue;
AValidateEditValue, AFromButtonChecked: Boolean);
procedure SynchronizeButtonsStyle; override;
procedure ParentBackgroundChanged; override;
procedure Resize; override;
procedure SetDragKind(Value: TDragKind); override;
procedure ArrangeButtons; override;
function GetButtonInstance: TWinControl; override;
procedure UpdateButtons; override;
procedure AfterLoading;
function IsLoading: Boolean;
procedure Loaded; override;
procedure Updated; override;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
procedure ButtonChecked(AButton: TcxCustomRadioGroupButton);
property ViewInfo: TcxCustomRadioGroupViewInfo read GetViewInfo;
property SkinsPaintCopy: Boolean read FSkinsPaintCopy write FSkinsPaintCopy;
public
procedure Activate(var AEditData: TcxCustomEditData); override;
procedure Clear; override;
procedure FlipChildren(AllLevels: Boolean); override;
class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
procedure GetTabOrderList(List: TList); override;
procedure PrepareEditValue(const ADisplayValue: TcxEditValue;
out EditValue: TcxEditValue; AEditFocused: Boolean); override;
procedure SetFocus; override;
property ActiveProperties: TcxCustomRadioGroupProperties read GetActiveProperties;
property Buttons[Index: Integer]: TcxCustomRadioGroupButton read GetButton;
property ItemIndex: Integer read GetItemIndex write SetItemIndex default -1;
property Properties: TcxCustomRadioGroupProperties read GetProperties
write SetProperties;
property Transparent;
end;
{ TcxRadioGroup }
TcxRadioGroup = class(TcxCustomRadioGroup)
private
function GetActiveProperties: TcxRadioGroupProperties;
function GetProperties: TcxRadioGroupProperties;
procedure SetProperties(Value: TcxRadioGroupProperties);
public
class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
property ActiveProperties: TcxRadioGroupProperties read GetActiveProperties;
published
property Align;
property Alignment;
property Anchors;
property BiDiMode;
property Caption;
property Constraints;
property Ctl3D;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property ParentBackground;
property ParentBiDiMode;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?