cxcontainer.pas

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

PAS
1,761
字号
      read GetStyle write SetStyle; default;
    property OnChanged: TNotifyEvent write SetOnChanged;
  end;

  TcxContainerStylesClass = class of TcxContainerStyles;

  { TcxStyleController }

  TcxStyleController = class(TComponent)
  private
    FIsDestruction: Boolean;
    FIsFontScaled: Boolean;
    FListeners: TList;
    FOnStyleChanged: TNotifyEvent;
    function GetFakeStyleController: TcxStyleController;
    function GetStyle: TcxContainerStyle;
    function GetInternalStyle(AState: TcxContainerStateItem): TcxContainerStyle;
    procedure SetFakeStyleController(Value: TcxStyleController);
    procedure SetInternalStyle(AState: TcxContainerStateItem; Value: TcxContainerStyle);
    procedure StyleChanged(Sender: TObject);
  protected
    FStyles: TcxContainerStyles;
    procedure Loaded; override;
    procedure AddListener(AListener: TcxContainerStyle); virtual;
    procedure Changed;
    procedure ChangeFontScale(M, D: Integer);
    function GetStyleClass: TcxContainerStyleClass; virtual;
    function GetStylesClass: TcxContainerStylesClass; virtual;
    function IsDestruction: Boolean;
    procedure RemoveListener(AListener: TcxContainerStyle); virtual;
    property Style: TcxContainerStyle read GetStyle;
    property Listeners: TList read FListeners;
    property OnStyleChanged: TNotifyEvent read FOnStyleChanged write FOnStyleChanged;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure RestoreStyles;
    property Styles[AState: TcxContainerStateItem]: TcxContainerStyle
      read GetInternalStyle write SetInternalStyle;
  published
    property FakeStyleController: TcxStyleController read GetFakeStyleController
      write SetFakeStyleController stored False;
  end;

  { IcxContainerInnerControl }

  IcxContainerInnerControl = interface
  ['{1B111318-D9C9-4C35-9EFF-5D95793C0106}']
    function GetControl: TWinControl;
    function GetControlContainer: TcxContainer;
    property Control: TWinControl read GetControl;
    property ControlContainer: TcxContainer read GetControlContainer;
  end;

  TcxScrollBarInfo = TScrollBarInfo;

  { TcxContainer }

  TcxContainerActiveStyleData = record
    ContainerState: TcxContainerState;
    ActiveStyle: TcxContainerStyle;
  end;

  TcxContainerInnerControlBounds = record
    IsEmpty: Boolean;
    Rect: TRect;
  end;

  TcxContainerSizeGripData = record
    Bounds: TRect;
    Visible: Boolean;
  end;

  TcxContainer = class(TcxControl, IUnknown,
    IcxCompoundControl, IcxMouseTrackingCaller)
  private
    FActiveStyleData: TcxContainerActiveStyleData;
    FInnerControl: TWinControl;
    FInnerControlBounds: TcxContainerInnerControlBounds;
    FInnerControlMouseDown: Boolean;
    FInnerControlBufferedPaint: Boolean;
    FSaveInnerControlWndProc: TWndMethod;
    FIsDestroying: Boolean;
    FIsRefreshLocked: Boolean;
    FIsViewInfoCalculated: Boolean;
    FLockAlignControlsCount: Integer;
    FOnGlass: Boolean;
    FRepaintOnGlass: Boolean;
    FPopupMenuLockCount: Integer;
    FRefreshingContainer: Boolean;
    FScrollBarsCalculating: Boolean;
    FSizeGripData: TcxContainerSizeGripData;
    function GetActiveControl: TWinControl;
    function GetFakeStyleController: TcxStyleController;
    function GetInternalStyle(AState: TcxContainerStateItem): TcxContainerStyle;
    function GetIsDestroying: Boolean;
    function GetStyle: TcxContainerStyle;
    function GetStyleDisabled: TcxContainerStyle;
    function GetStyleFocused: TcxContainerStyle;
    function GetStyleHot: TcxContainerStyle;
    procedure SetFakeStyleController(Value: TcxStyleController);
    procedure SetInnerControl(Value: TWinControl);
    procedure SetStyle(Value: TcxContainerStyle);
    procedure SetStyleDisabled(Value: TcxContainerStyle);
    procedure SetStyleFocused(Value: TcxContainerStyle);
    procedure SetStyleHot(Value: TcxContainerStyle);
    procedure SetInternalStyle(AState: TcxContainerStateItem;
      Value: TcxContainerStyle);
    function GetDragKind: TDragKind;
    procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
    procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT;
    procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
    procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
    procedure WMWindowPosChanged(var Message: TWMWindowPosChanged);
      message WM_WINDOWPOSCHANGED;
    procedure WMWindowPosChanging(var Message: TWMWindowPosChanging);
      message WM_WINDOWPOSCHANGING;
    procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
    procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
    procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
    procedure CMParentColorChanged(var Message: TMessage); message CM_PARENTCOLORCHANGED;
    procedure CMShortRefreshContainer(var Message: TMessage); message CM_SHORTREFRESHCONTAINER;
    procedure CMParentFontChanged(var Message: TMessage); message CM_PARENTFONTCHANGED;
    procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE;
    procedure CMUpdateScrollBars(var Message: TMessage); message CM_UPDATESCROLLBARS;
  protected
    FInternalSetting: Boolean;
    FIsCreating: Boolean;
    FStyles: TcxContainerStyles;
    FViewInfo: TcxContainerViewInfo;

    // IcxMouseTrackingCaller
    procedure IcxMouseTrackingCaller.MouseLeave = MouseTrackingCallerMouseLeave;
    procedure MouseTrackingCallerMouseLeave;

    // IcxLookAndFeelContainer
    function GetLookAndFeelValue: TcxLookAndFeel; override;

    procedure AdjustClientRect(var Rect: TRect); override;
    procedure AlignControls(AControl: TControl; var Rect: TRect); override;
    function AllowAutoDragAndDropAtDesignTime(X, Y: Integer;
      Shift: TShiftState): Boolean; override;
    function CanFocusOnClick: Boolean; override;
    procedure ChangeScale(M, D: Integer); override;
    procedure ColorChanged; override;
    procedure CursorChanged; override;
    procedure DoContextPopup(MousePos: TPoint;
      var Handled: Boolean); override;
    procedure DragCanceled; override;
    procedure DrawBordersBackgroundByPainter(ACanvas: TcxCanvas;
      APainter: TcxCustomLookAndFeelPainterClass);
    procedure FocusChanged; override;
    function FocusWhenChildIsClicked(AChild: TControl): Boolean; override;
    function GetClientBounds: TRect; override;
    function IsContainerFocused: Boolean; virtual;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure Loaded; override;
    function MayFocus: Boolean; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseEnter(AControl: TControl); override;
    procedure MouseLeave(AControl: TControl); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    function NeedsScrollBars: Boolean; override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure Paint; override;
    procedure Resize; override;
    procedure SetDragMode(Value: TDragMode); override;
    procedure CreateHandle; override;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWindowHandle(const Params: TCreateParams); override;
    procedure WndProc(var Message: TMessage); override;
    procedure AdjustInnerControl; virtual;
    procedure CalculateViewInfo(const P: TPoint; AMouseTracking: Boolean); virtual;
    function CanContainerHandleTabs: Boolean; virtual;
    function CanHaveTransparentBorder: Boolean; virtual;
    function CanShowPopupMenu(const P: TPoint): Boolean; virtual;
    procedure CheckIsViewInfoCalculated;
    procedure ContainerStyleChanged(Sender: TObject); virtual;
    procedure DataChange; virtual;
    procedure DataSetChange; virtual;
    function DefaultParentColor: Boolean; virtual;
    procedure EnabledChanged; dynamic;
    procedure EndMouseTracking; virtual;
    function GetActiveStyle: TcxContainerStyle; virtual;
    function GetBorderExtent: TRect; virtual;
    function GetInnerControlBounds(const AInnerControlsRegion: TRect;
      AInnerControl: TControl): TcxContainerInnerControlBounds; virtual;
    function GetShadowBounds: TRect; virtual;
    function GetStyleClass: TcxContainerStyleClass; virtual;
    function GetStylesClass: TcxContainerStylesClass; virtual;
    function GetViewInfoClass: TcxContainerViewInfoClass; virtual;
    function HasShadow: Boolean; virtual;
    procedure InnerControlWndProc(var Message: TMessage); virtual;
    function InternalGetActiveStyle: TcxContainerStyle; virtual;
    function InternalGetNotPublishedStyleValues: TcxContainerStyleValues; virtual;
    function IsAlignControlsLocked: Boolean;
    function IsInnerControlBoundsChanged(AControl: TWinControl;
      const ABounds: TcxContainerInnerControlBounds): Boolean;
    function IsContainerClass: Boolean; virtual;
    function IsPopupMenuLocked: Boolean;
    function IsReadOnly: Boolean; virtual;
    function IsTransparentBackground: Boolean; virtual;
    function RefreshContainer(const P: TPoint; Button: TcxMouseButton; Shift: TShiftState;
      AIsMouseEvent: Boolean): Boolean; virtual;
    procedure SaveInnerControlBounds(AControl: TWinControl;
      const ABounds: TcxContainerInnerControlBounds);
    procedure SetShadowRegion; virtual;
    procedure SetSize; virtual;
    procedure SetVisibleBoundsClipRect; virtual;
    procedure UpdateData; virtual;
    procedure AdjustScrollBarPosition(AScrollBar: TcxScrollBar); virtual;
    function GetBackgroundThemedObjectType: TdxThemedObjectType; virtual;
    function GetBackgroundNativePart: Integer; virtual;
    function GetBackgroundNativeState: Integer; virtual;
    function GetScrollBarBounds(const AScrollBarRect: TRect): TRect; virtual;
    function GetScrollBarEnabled(AScrollBar: TcxScrollBar;
      const AScrollBarinfo: TcxScrollBarInfo): Boolean; virtual;
    function GetScrollBarInfo(var AScrollBarInfo: TcxScrollBarInfo;
      const AKind: TScrollBarKind): Boolean; virtual;
    function IsAdjustingScrollBarPositionNeeded(
      const AScrollBarInfo: TcxScrollBarInfo): Boolean; virtual;
    function IsNativeStyle: Boolean; virtual;
    procedure SafeSelectionFocusInnerControl; virtual;
    procedure SetDragKind(Value: TDragKind); virtual;
    procedure SetScrollBarVisible(AScrollBar: TcxScrollBar;
      AVisible: Boolean); virtual;
    property ActiveStyle: TcxContainerStyle read GetActiveStyle;
    property DragKind: TDragKind read GetDragKind write SetDragKind default dkDrag;
    property IsViewInfoCalculated: Boolean read FIsViewInfoCalculated
      write FIsViewInfoCalculated;
    property ScrollBarsCalculating: Boolean read FScrollBarsCalculating;
    property Style: TcxContainerStyle read GetStyle write SetStyle;
    property StyleDisabled: TcxContainerStyle read GetStyleDisabled
      write SetStyleDisabled;
    property StyleFocused: TcxContainerStyle read GetStyleFocused
      write SetStyleFocused;
    property StyleHot: TcxContainerStyle read GetStyleHot write SetStyleHot;
    property ViewInfo: TcxContainerViewInfo read FViewInfo;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function Focused: Boolean; override;
    function GetDragImages: TDragImageList; override;
    procedure GetTabOrderList(List: TList); override;
    procedure SetFocus; override;
    procedure ClearSavedChildControlRegions; virtual;
    function GetVisibleBounds: TRect; virtual;
    function HasPopupWindow: Boolean; virtual;
    function InnerControlDefaultHandler(var Message: TMessage): Boolean; virtual;
    function InnerControlMenuHandler(var Message: TMessage): Boolean; virtual;
    procedure Invalidate; override;
    function IsInplace: Boolean; virtual;
    function IsStylePropertyPublished(const APropertyName: string;
      AExtendedStyle: Boolean): Boolean;
    procedure LockAlignControls(ALock: Boolean);
    procedure LockPopupMenu(ALock: Boolean);
    procedure RestoreStyles;
    procedure SetScrollBarsParameters(AIsScrolling: Boolean = False); virtual;
    function ShortRefreshContainer(AIsMouseEvent: Boolean): Boolean;
    procedure Update; override;
    procedure UpdateScrollBarsParameters;
    property InnerControl: TWinControl read FInnerControl write SetInnerControl;
    property InnerControlMouseDown: Boolean read FInnerControlMouseDown
      write FInnerControlMouseDown;
    property IsDestroying: Boolean read GetIsDestroying;
    property OnGlass: Boolean read FOnGlass write FOnGlass;
    property ParentColor;
    property ParentFont;
    property Styles[AState: TcxContainerStateItem]: TcxContainerStyle
      read GetInternalStyle write SetInternalStyle;
    property VisibleBounds: TRect read GetVisibleBounds;
  published
    property FakeStyleController: TcxStyleController read GetFakeStyleController
      write SetFakeStyleController stored False;
    property TabStop default True;
  end;

  { TcxCustomPopupWindow }

  TcxCustomPopupWindow = class(TcxPopupWindow)
  private
    FCaptureFocus: Boolean;
    FDeactivateLockCount: Integer;
    FDeactivation: Boolean;
    FFocusedControl: TWinControl;
    FIsTopMost: Boolean;
    FJustClosed: Boolean;
    FModalMode: Boolean;
    FTerminateOnDestroy: Boolean;
    FOwnerControl: TWinControl;
    FOnClosed: TNotifyEvent;
    FOnClosing: TNotifyEvent;
    FOnShowed: TNotifyEvent;
    FOnShowing: TNotifyEvent;
    function GetJustClosed: Boolean;
    procedure SetCaptureFocus(Value: Boolean);
    procedure SetIsTopMost(Value: Boolean);
    procedure WMActivateApp(var Message: TWMActivateApp); message WM_ACTIVATEAPP;
    procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
    procedure CMClosePopupWindow(var Message: TMessage); message CM_CLOSEPOPUPWINDOW;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure CMShowPopupWindow(var Message: TMessage); message CM_SHOWPOPUPWINDOW;
  protected
    FStyle: TcxContainerStyle;
    FViewInfo: TcxContainerViewInfo;
    procedure AdjustClientRect(var Rect: TRect); override;
    procedure Deactivate; override;
    function GetOwnerScreenBounds: TRect; override;
    procedure InitPopup; override;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure Paint; override;
    procedure VisibleChanged; override;
    procedure CreateHandle; override;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWnd; override;
    function AcceptsAnySize: Boolean; virtual;
    procedure DoClosed; virtual;
    procedure DoClosing; virtual;
    procedure DoShowed; virtual;
    procedure DoShowing; virtual;
    function GetFirstFocusControl(AControl: TWinControl): TWinControl;
    function HasBackground: Boolean; virtual;
    function IsDeactivateLocked: Boolean;
    function IsOwnerControlVisible: Boolean;
    function IsSysKeyAccepted(Key: Word): Boolean; virtual;
    procedure ModalCloseUp; virtual;
    procedure MouseEnter(AControl: TControl); dynamic;
    procedure MouseLeave(AControl: TControl); dynamic;
    function NeedIgnoreMouseMessageAfterCloseUp(AWnd: THandle; AMsg: Cardinal;
      AShift: TShiftState; const APos: TPoint): Boolean; virtual;
    procedure PopupWindowStyleChanged(Sender: TObject); virtual;
    procedure RecreateWindow;
    property Style: TcxContainerStyle read FStyle;
    property ViewInfo: TcxContainerViewInfo read FViewInfo;
  public
    constructor Create(AOwnerControl: TWinControl); reintroduce; virtual;
    destructor Destroy; override;
    function Focused: Boolean; override;
{$IFDEF DELPHI5}
    function CanFocus: Boolean; override;
{$ENDIF}
    procedure ClosePopup;
    procedure CloseUp; override;
    procedure CorrectBoundsWithDesktopWorkArea(var APosition: TPoint); virtual;
    function GetStyleClass: TcxContainerStyleClass; virtual;
    function GetViewInfoClass: TcxContainerViewInfoClass; virtual;
    function HasCapture: Boolean;
    function IsShortCut(var Message: TWMKey): Boolean; override;
    function IsVisible: Boolean;

⌨️ 快捷键说明

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