cxedit.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,387 行 · 第 1/5 页

PAS
1,387
字号

  TcxEditSizeProperties = record
    Height: Integer;
    MaxLineCount: Integer;
    Width: Integer;
  end;
  PcxEditSizeProperties = ^TcxEditSizeProperties;

  TcxEditContentOption = (ecoShowFocusRectWhenInplace, ecoOffsetButtonContent);
  TcxEditContentOptions = set of TcxEditContentOption;

  TcxEditContentParams = record
    ExternalBorderBounds: TRect;
    Offsets: TRect;
    Options: TcxEditContentOptions;
    SizeCorrection: TSize;
  end;

  TcxCustomEditViewData = class;

  TcxEditGetDefaultButtonWidthEvent = procedure(Sender: TcxCustomEditViewData;
    AIndex: Integer; var ADefaultWidth: Integer) of object;
  TcxEditViewDataGetDisplayTextEvent = procedure(Sender: TcxCustomEditViewData;
    var AText: string) of object;

  TcxCustomEditViewData = class(TPersistent)
  private
    FData: TObject; // internal for OnGetDisplayText event
    FIsInplace: Boolean;
    FLeftSideLeftmostButtonIndex, FLeftSideRightmostButtonIndex: Integer;
    FRightSideLeftmostButtonIndex, FRightSideRightmostButtonIndex: Integer;
    FOnGetDefaultButtonWidth: TcxEditGetDefaultButtonWidthEvent;
    FOnGetDisplayText: TcxEditViewDataGetDisplayTextEvent;
    procedure DoGetButtonState(AViewInfo: TcxCustomEditViewInfo;
      AButtonVisibleIndex: Integer; var AState: TcxEditButtonState);
    function DoGetDefaultButtonWidth(AIndex: Integer): Integer;
    function GetPaintOptions: TcxEditPaintOptions;
    function GetStyle: TcxCustomEditStyle;
    procedure SetStyle(Value: TcxCustomEditStyle);
  protected
    FEdit: TcxCustomEdit;
    FProperties: TcxCustomEditProperties;
    FStyle: TcxCustomEditStyle;
    procedure CalculateButtonNativeInfo(AButtonViewInfo: TcxEditButtonViewInfo); virtual;
    procedure CalculateViewInfo(AViewInfo: TcxCustomEditViewInfo; AIsMouseEvent: Boolean);
    function CanPressButton(AViewInfo: TcxCustomEditViewInfo; AButtonVisibleIndex: Integer):
      Boolean; virtual;
    procedure CheckSizeConstraints(var AEditSize: TSize);
    procedure CorrectBorderStyle(var ABorderStyle: TcxEditBorderStyle);
    procedure DoOnGetDisplayText(var AText: string);
    function EditValueToDisplayText(AEditValue: TcxEditValue): string;
    function GetButtonsStyle: TcxEditButtonStyle;
    function GetCaptureButtonVisibleIndex: Integer;
    procedure GetColorSettings(AViewInfo: TcxCustomEditViewInfo; var FillColor, TextColor: TColor);
    function GetContainerState(const ABounds: TRect; const P: TPoint;
      Button: TcxMouseButton; Shift: TShiftState;
      AIsMouseEvent: Boolean): TcxContainerState; virtual;
    function GetEditContentDefaultOffsets: TRect; virtual;
    function GetEditNativeState(AViewInfo: TcxCustomEditViewInfo): Integer; virtual;
    function HasThickBorders: Boolean; virtual;
    procedure InitCacheData; virtual;
    procedure InitEditContentParams(var AParams: TcxEditContentParams); virtual;
    procedure Initialize; virtual;
    function InternalEditValueToDisplayText(AEditValue: TcxEditValue): string; virtual;
    function InternalFocused: Boolean;
    function InternalGetEditConstantPartSize(ACanvas: TcxCanvas; AIsInplace: Boolean;
      AEditSizeProperties: TcxEditSizeProperties; var MinContentSize: TSize;
      AViewInfo: TcxCustomEditViewInfo): TSize; virtual;
    function InternalGetEditContentSize(ACanvas: TcxCanvas; const AEditValue: TcxEditValue;
      const AEditSizeProperties: TcxEditSizeProperties): TSize; virtual;
    function IsButtonPressed(AViewInfo: TcxCustomEditViewInfo;
      AButtonVisibleIndex: Integer): Boolean; virtual;
  public
    AutoHeight: Boolean;
    Bounds: TRect;
    ButtonsOnlyStyle: Boolean;
    ButtonVisibleCount: Integer;
    ContainerState: TcxContainerState;
    ContentOffset: TRect;
    EditContentParams: TcxEditContentParams;
    Enabled: Boolean;
    Focused: Boolean;
    HorzAlignment: TcxEditHorzAlignment;
    HScrollBar: TcxControlScrollBar;
    InnerEdit: IcxCustomInnerEdit;
    InplaceEditParams: TcxInplaceEditParams;
    IsDesigning: Boolean;
    IsSelected: Boolean; // Row selected
    IsValueSource: Boolean;
    MaxLineCount: Integer;
    NativeStyle: Boolean;
    PaintOptions: TcxEditPaintOptions;
    PreviewMode: Boolean;
    Selected: Boolean;
    SelStart, SelLength: Integer;
    SelTextColor, SelBackgroundColor: TColor;
    VertAlignment: TcxEditVertAlignment;
    VScrollBar: TcxControlScrollBar;
    WindowHandle: HWND;
    constructor Create(AProperties: TcxCustomEditProperties; AStyle: TcxCustomEditStyle;
      AIsInplace: Boolean); reintroduce; virtual;
    procedure Calculate(ACanvas: TcxCanvas; const ABounds: TRect; const P: TPoint;
      Button: TcxMouseButton; Shift: TShiftState; AViewInfo: TcxCustomEditViewInfo;
      AIsMouseEvent: Boolean); virtual;
    procedure CalculateButtonBounds(ACanvas: TcxCanvas; AViewInfo: TcxCustomEditViewInfo;
      AButtonVisibleIndex: Integer; var ButtonsRect: TRect); virtual;
    procedure CalculateButtonsViewInfo(ACanvas: TcxCanvas; const ABounds: TRect; const P: TPoint;
      Button: TcxMouseButton; Shift: TShiftState; AViewInfo: TcxCustomEditViewInfo;
      AIsMouseEvent: Boolean); virtual;
    procedure CalculateButtonViewInfo(ACanvas: TcxCanvas; AViewInfo: TcxCustomEditViewInfo;
      AButtonVisibleIndex: Integer; var ButtonsRect: TRect); virtual;
    procedure CalculateEx(ACanvas: TcxCanvas; const ABounds: TRect; const P: TPoint;
      Button: TcxMouseButton; Shift: TShiftState; AViewInfo: TcxCustomEditViewInfo;
      AIsMouseEvent: Boolean);
    procedure CheckButtonsOnly(AViewInfo: TcxCustomEditViewInfo;
      APrevButtonsWidth, AButtonsWidth: Integer); virtual;
    procedure EditValueToDrawValue(ACanvas: TcxCanvas; const AEditValue: TcxEditValue;
      AViewInfo: TcxCustomEditViewInfo); virtual;
    function GetBorderColor: TColor; virtual;
    function GetBorderExtent: TRect; virtual;
    function GetBorderExtentByEdges(ABorderWidth: Integer): TRect; virtual;
    function GetBorderExtentByPainter: TRect; virtual;
    function GetBorderStyle: TcxEditBorderStyle; virtual;
    function GetButtonsExtent(ACanvas: TcxCanvas): TRect; virtual;
    function GetClientExtent(ACanvas: TcxCanvas;
      AViewInfo: TcxCustomEditViewInfo): TRect; virtual;
    function GetEditConstantPartSize(ACanvas: TcxCanvas;
      const AEditSizeProperties: TcxEditSizeProperties; var MinContentSize: TSize;
      AViewInfo: TcxCustomEditViewInfo = nil): TSize; virtual;
    function GetEditContentSize(ACanvas: TcxCanvas; const AEditValue: TcxEditValue;
      const AEditSizeProperties: TcxEditSizeProperties): TSize; virtual;
    function GetEditContentSizeCorrection: TSize; virtual;
    function GetEditSize(ACanvas: TcxCanvas; const AEditValue: TcxEditValue;
      AEditSizeProperties: TcxEditSizeProperties;
      AViewInfo: TcxCustomEditViewInfo = nil): TSize;
    function HasShadow: Boolean; virtual;
    function IgnoreButtonWhileStretching(
      AButtonVisibleIndex: Integer): Boolean; virtual;
    class function IsNativeStyle(ALookAndFeel: TcxLookAndFeel): Boolean; virtual;
    property Data: TObject read FData write FData;
    property Edit: TcxCustomEdit read FEdit write FEdit;
    property IsInplace: Boolean read FIsInplace;
    property Properties: TcxCustomEditProperties read FProperties;
    property Style: TcxCustomEditStyle read GetStyle write SetStyle;
    property OnGetDefaultButtonWidth: TcxEditGetDefaultButtonWidthEvent
      read FOnGetDefaultButtonWidth write FOnGetDefaultButtonWidth;
    property OnGetDisplayText: TcxEditViewDataGetDisplayTextEvent
      read FOnGetDisplayText write FOnGetDisplayText;
  end;

  TcxCustomEditViewDataClass = class of TcxCustomEditViewData;

  { TcxEditStyleController }

  TcxEditStyle = class;

  TcxEditStyleController = class(TcxStyleController)
  private
    function GetInternalStyle(AState: TcxContainerStateItem): TcxCustomEditStyle;
    function GetStyle: TcxEditStyle;
    function GetStyleDisabled: TcxEditStyle;
    function GetStyleFocused: TcxEditStyle;
    function GetStyleHot: TcxEditStyle;
    procedure SetInternalStyle(AState: TcxContainerStateItem; Value: TcxCustomEditStyle);
    procedure SetStyle(Value: TcxEditStyle);
    procedure SetStyleDisabled(Value: TcxEditStyle);
    procedure SetStyleFocused(Value: TcxEditStyle);
    procedure SetStyleHot(Value: TcxEditStyle);
  protected
    function GetStyleClass: TcxContainerStyleClass; override;
  public
    property Styles[AState: TcxContainerStateItem]: TcxCustomEditStyle
      read GetInternalStyle write SetInternalStyle;
  published
    property Style: TcxEditStyle read GetStyle write SetStyle;
    property StyleDisabled: TcxEditStyle read GetStyleDisabled
      write SetStyleDisabled;
    property StyleFocused: TcxEditStyle read GetStyleFocused
      write SetStyleFocused;
    property StyleHot: TcxEditStyle read GetStyleHot write SetStyleHot;
    property OnStyleChanged;
  end;

  { TcxCustomEditStyle }

  TcxCustomEditStyle = class(TcxContainerStyle)
  private
    FButtonStyle: TcxEditButtonStyle;
    FButtonTransparency: TcxEditButtonTransparency;
    FGradient: Boolean;
    FGradientButtons: Boolean;
    FGradientDirection: TcxEditGradientDirection;
    FPopupBorderStyle: TcxEditPopupBorderStyle;
    FPopupCloseButton: Boolean;

    function GetActiveStyleController: TcxEditStyleController;
    function GetAssignedValues: TcxEditStyleValues;
    function GetBaseStyle: TcxCustomEditStyle;
    function GetBorderStyle: TcxEditBorderStyle;
    function GetButtonStyle: TcxEditButtonStyle;
    function GetButtonTransparency: TcxEditButtonTransparency;
    function GetEdit: TcxCustomEdit;
    function GetGradient: Boolean;
    function GetGradientButtons: Boolean;
    function GetGradientDirection: TcxEditGradientDirection;
    function GetPopupBorderStyle: TcxEditPopupBorderStyle;
    function GetPopupCloseButton: Boolean;
    function GetStyleController: TcxEditStyleController;

    function InternalGetButtonStyle(var ButtonStyle: TcxEditButtonStyle): Boolean;
    function InternalGetButtonTransparency(var ButtonTransparency: TcxEditButtonTransparency): Boolean;
    function InternalGetGradient(var Gradient: Boolean): Boolean;
    function InternalGetGradientButtons(var GradientButtons: Boolean): Boolean;
    function InternalGetGradientDirection(var GradientDirection: TcxEditGradientDirection): Boolean;
    function InternalGetPopupBorderStyle(var PopupBorderStyle: TcxEditPopupBorderStyle): Boolean;

    function IsBorderStyleStored: Boolean;
    function IsButtonStyleStored: Boolean;
    function IsButtonTransparencyStored: Boolean;
    function IsGradientStored: Boolean;
    function IsGradientButtonsStored: Boolean;
    function IsGradientDirectionStored: Boolean;
    function IsPopupBorderStyleStored: Boolean;
    function IsStyleControllerStored: Boolean;

    procedure SetAssignedValues(Value: TcxEditStyleValues);
    procedure SetBorderStyle(Value: TcxEditBorderStyle);
    procedure SetButtonStyle(Value: TcxEditButtonStyle);
    procedure SetButtonTransparency(Value: TcxEditButtonTransparency);
    procedure SetGradient(Value: Boolean);
    procedure SetGradientButtons(Value: Boolean);
    procedure SetGradientDirection(Value: TcxEditGradientDirection);
    procedure SetPopupBorderStyle(Value: TcxEditPopupBorderStyle);
    procedure SetPopupCloseButton(Value: Boolean);
    procedure SetStyleController(Value: TcxEditStyleController);
  protected
    function GetDefaultStyleController: TcxStyleController; override;
    function InternalGetNotPublishedExtendedStyleValues: TcxEditStyleValues; override;
    function DefaultButtonStyle: TcxEditButtonStyle; virtual;
    function DefaultButtonTransparency: TcxEditButtonTransparency; virtual;
    function DefaultGradient: Boolean; virtual;
    function DefaultGradientButtons: Boolean; virtual;
    function DefaultGradientDirection: TcxEditGradientDirection; virtual;
    function DefaultPopupBorderStyle: TcxEditPopupBorderStyle; virtual;
    property PopupCloseButton: Boolean read GetPopupCloseButton
      write SetPopupCloseButton default True;
  public
    constructor Create(AOwner: TPersistent; ADirectAccessMode: Boolean;
      AParentStyle: TcxContainerStyle = nil;
      AState: TcxContainerStateItem = csNormal); override;
    procedure Assign(Source: TPersistent); override;
    function GetStyleValueCount: Integer; override;
    function GetStyleValueName(AStyleValue: TcxEditStyleValue;
      out StyleValueName: string): Boolean; override;
    function IsValueAssigned(AValue: TcxEditStyleValue): Boolean; override;
    procedure Init(AParams: TcxViewParams);
    property ActiveStyleController: TcxEditStyleController
      read GetActiveStyleController;
    property AssignedValues: TcxEditStyleValues read GetAssignedValues
      write SetAssignedValues stored False;
    property BaseStyle: TcxCustomEditStyle read GetBaseStyle;
    property BorderStyle: TcxEditBorderStyle read GetBorderStyle
      write SetBorderStyle stored IsBorderStyleStored;
    property ButtonStyle: TcxEditButtonStyle read GetButtonStyle
      write SetButtonStyle stored IsButtonStyleStored;
    property ButtonTransparency: TcxEditButtonTransparency read GetButtonTransparency
      write SetButtonTransparency stored IsButtonTransparencyStored;
    property Edit: TcxCustomEdit read GetEdit;
    property Gradient: Boolean read GetGradient write SetGradient
      stored IsGradientStored;
    property GradientButtons: Boolean read GetGradientButtons
      write SetGradientButtons stored IsGradientButtonsStored;
    property GradientDirection: TcxEditGradientDirection read GetGradientDirection
      write SetGradientDirection stored IsGradientDirectionStored;
    property PopupBorderStyle: TcxEditPopupBorderStyle read GetPopupBorderStyle
      write SetPopupBorderStyle stored IsPopupBorderStyleStored;
    property StyleController: TcxEditStyleController read GetStyleController
      write SetStyleController stored IsStyleControllerStored;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?