cxpcpainters.pas

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

PAS
1,694
字号
    procedure InternalPaintTabsRowsDelimiter(var ARowRect: TRect;
      AColors: array of TColor);
    function IsMainTabRow(AVisibleRow: Integer): Boolean;
    function NeedShowTabsRegionFrame: Boolean; virtual;
    procedure PaintMainTabFrame(var R: TRect); virtual;
    procedure PaintMainTabRowUnderline;
    procedure PaintTabsDelimiter(const ARect: TRect); virtual;
    procedure PaintTabsRowsDelimiter(var ARowRect: TRect; ARowIndex: Integer); virtual;
  public
    function CalculateTabNormalHeight: Integer; override;
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
    class function IsMainTabBoundWithClient: boolean; override;
    class function IsMultiSelectionAccepted: boolean; override;
    class function IsTabPressable: Boolean; override;
  end;

  { TcxPCUltraFlatPainter }

  TcxPCUltraFlatPainter = class(TcxPCExtraFlatPainter)
  protected
    procedure CalculateButtonContentParameters(AButton: TcxPCNavigatorButton;
      out AParameters: TcxPCNavigatorButtonContentParameters); override;
    function GetButtonColor(AButtonState: TcxPCNavigatorButtonState): TColor; override;
    function GetButtonContentPosition(AButton: TcxPCNavigatorButton): TPoint; override;
    function GetButtonHeight: Integer; override;
    function GetButtonsDistance(AButton1, AButton2: TcxPCNavigatorButton): Integer; override;
    function GetButtonsRegionHOffset: Integer; override;
    function GetButtonWidth(Button: TcxPCNavigatorButton): Integer; override;
    function GetFocusRect: TRect; override;
    procedure PaintButtonFrame(var ARect: TRect;
      AButtonState: TcxPCNavigatorButtonState); override;
    procedure PaintFrame; override;
    procedure PaintMainTabFrame(var R: TRect); override;
    procedure PaintTabsRowsDelimiter(var ARowRect: TRect; ARowIndex: Integer); override;
  public
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
  end;

  { TcxPCFlatPainter }

  TcxPCFlatPainter = class(TcxPCTabsPainter)
  protected
    function GetButtonContentPosition(AButton: TcxPCNavigatorButton): TPoint; override;
    function GetButtonHeight: Integer; override;
    function GetButtonWidth(Button: TcxPCNavigatorButton): Integer; override;
    function GetFrameWidth: Integer; override;
    function GetTabClipRgn(ATabVisibleIndex: Integer): TcxRegion; override;
    function GetTabClipRgnOperation(ATabVisibleIndex: Integer): TcxRegionOperation; override;
    function IsNativePainting: Boolean; override;
    function NeedShowFrame: Boolean; override;
    procedure PaintButtonFrame(var ARect: TRect;
      AButtonState: TcxPCNavigatorButtonState); override;
    procedure PaintFrameBorder(R: TRect); override;
    procedure PaintTabFrame(ATabVisibleIndex: Integer); override;
  public
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
  end;

  { TcxPCOffice11Painter }

  TcxPCOffice11Painter = class(TcxPCUltraFlatPainter)
  private
    function GetSelectedColor1: TColor;
    function GetSelectedColor2: TColor;
    function IsGradientClienArea: Boolean;
    function NeedShowMainTabOppositeRowLine: Boolean;
    procedure PaintMainTabOppositeRowLine;
  protected
    class function GetFrameColor: TColor; virtual;
    procedure DrawBackground(ACanvas: TCanvas; ARect: TRect;
      ATabVisibleIndex: Integer); override;
    procedure ExcludeUnderLine(var R: TRect); override;
    procedure FillDisplayRect; override;
    function GetButtonContentColor(AButtonState: TcxPCNavigatorButtonState): TColor; override;
    function GetClientRectOffset: TRect; override;
    function GetFocusRect: TRect; override;
    function GetFreeSpaceColor: TColor; override;
    function GetMainTabRowUnderlineColor: TColor; override;
    function GetMainTabRowUnderlineRect: TRect; override;
    function GetTabBodyColor(TabVisibleIndex: Integer): TColor; override;
    function GetTabsDelimiterOffsets: TcxPCTabsDelimiterOffsets; override;
    function GetTabsDelimiterWidth: Integer; override;
    function GetTabsRowsDelimiterWidth: Integer; override;
    function IsTabTransparent(ATabVisibleIndex: Integer): Boolean; override;
    function NeedRedrawOnResize: Boolean; override;
    function NeedShowTabsRegionFrame: Boolean; override;
    procedure PaintButtonBackground(AButtonRect: TRect;
      AButtonState: TcxPCNavigatorButtonState); override;
    procedure PaintButtonFrame(var ARect: TRect;
      AButtonState: TcxPCNavigatorButtonState); override;
    procedure PaintClientArea; override;
    procedure PaintFrame; override;
    procedure PaintMainTabFrame(var R: TRect); override;
    procedure PaintTabsDelimiter(const ARect: TRect); override;
    procedure PaintTabsRowsDelimiter(var ARowRect: TRect; ARowIndex: Integer); override;
    procedure PrepareDrawTabContentBitmapBackground(ABitmap: TBitmap;
      const ABitmapPos: TPoint; ATabVisibleIndex: Integer); override;
    procedure DrawGradientBackground(ACanvas: TCanvas; ARect: TRect;
      ATabVisibleIndex: Integer; AHorizontal, AInverse: Boolean);
  public
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
  end;

  { TcxPCSlantedPainter }

  TcxPCSlantedPainter = class(TcxPCStandardPainter)
  private
    FCutValue: Integer;
    function GetTabsLineRect(ATabIndexInterval: TcxPCIndexInterval; AFullRect: Boolean): TRect;
    function GetTabUnderlineRect(ATab: TcxTab): TRect;
  protected
    function AlwaysColoredTabs: Boolean; override;
    procedure CalculateButtonContentParameters(AButton: TcxPCNavigatorButton;
      out AParameters: TcxPCNavigatorButtonContentParameters); override;
    function CalculateTabNormalWidth(Tab: TcxTab): Integer; override;
    procedure FillDisplayRect; override;
    function GetButtonColor(AButtonState: TcxPCNavigatorButtonState): TColor; override;
    function GetButtonContentColor(AButtonState: TcxPCNavigatorButtonState): TColor; override;
    function GetButtonContentPosition(AButton: TcxPCNavigatorButton): TPoint; override;
    function GetButtonHeight: Integer; override;
    function GetButtonsDistance(AButton1, AButton2: TcxPCNavigatorButton): Integer; override;
    function GetButtonsRegionFromTabsOffset: Integer; override;
    function GetButtonsRegionHOffset: Integer; override;
    function GetButtonsRegionWOffset: Integer; override;
    function GetButtonWidth(Button: TcxPCNavigatorButton): Integer; override;
    function GetClientColor: TColor; override;
    function GetClientRectOffset: TRect; override;
    function GetDefaultTabNormalHeight: Integer; override;
    function GetDrawImageOffset(TabVisibleIndex: Integer): TRect; override;
    function GetDrawTextHOffset(TabVisibleIndex: Integer): TRect; override;
    function GetFrameWidth: Integer; override;
    function GetImageTextDistance(ATabVisibleIndex: Integer): Integer; override;
    function GetMinTabNormalWidth(ATabVisibleIndex: Integer): Integer; override;
    function GetTabBodyColor(TabVisibleIndex: Integer): TColor; override;
    function GetTabClipRgn(ATabVisibleIndex: Integer): TcxRegion; override;
    function GetTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    function GetTabNormalWidth(ATabVisibleIndex: Integer): Integer; override;
    function GetTabsContainerOffsets: TRect; override;
    function GetTabsNormalDistance: TcxPCDistance; override;
    function GetTabsRectOffset: TRect; override;
    function GetTooNarrowTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    procedure Init; override;
    function InternalCalculateTabNormalHeight: Integer; override;
    function IsOverTab(TabVisibleIndex: Integer; X, Y: Integer): Boolean; override;
    function IsTabBorderThick(ATabVisibleIndex: Integer): Boolean; override;
    procedure PaintButtonFrame(var ARect: TRect;
      AButtonState: TcxPCNavigatorButtonState); override;
    procedure PaintFrame; override;
    procedure PaintTabShape(ATab: TcxTab; ATabVisibleIndex: Integer); override;
    procedure PaintTabsRegion; override;
    procedure PrepareDrawTabContentBitmapBackground(ABitmap: TBitmap;
      const ABitmapPos: TPoint; ATabVisibleIndex: Integer); override;

    function CanLightMainTab: Boolean; virtual;
    function DirectionalGetFigureRegion(const R: TRect; APoints: array of TPoint;
      ALinePositions: array of TLinePosition; ATabPositon: TcxTabPosition;
      AForContent: Boolean): TcxRegion;
    procedure DrawBackground(ACanvas: TCanvas; R: TRect;
      ATabVisibleIndex: Integer; AHorizontalGradient, AInverseGradient: Boolean); virtual;
    procedure DrawTabUnderline(ATabVisibleIndex: Integer); virtual;
    procedure GetBackgroundGradientColors(ATabVisibleIndex: Integer;
      out AColor1, AColor2: TColor); virtual;
    function GetCutValue: Integer;
    function GetGeometricalMinTabWidth: Integer; virtual;
    function GetFrameColor: TColor; virtual;
    function GetSlantedSides: TcxTabSlantPositions; virtual;
    procedure GetTabFramePolyline(ATabVisibleIndex: Integer;
      out APoints: TPoints; out ALinePositions: TLinePositions);
    function GetTabImageSize: TSize; virtual;
    function GetVerticalTextIndent: Integer; virtual;
    function InternalGetCutValue: Integer; virtual;
    function InternalGetTabClipRegion(ATabVisibleIndex: Integer;
      AForContent: Boolean): TcxRegion; virtual;
    procedure PaintTabFrame(ATabVisibleIndex: Integer; const R: TRect); virtual;
    procedure PaintTabStateMark(ATabVisibleIndex: Integer); virtual;

    property SlantedSides: TcxTabSlantPositions read GetSlantedSides;
  public
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
  end;

  { TcxPCOneNotePainter }

  TcxPCOneNotePainter = class(TcxPCSlantedPainter)
  protected
    class function AllowRotate: Boolean; override;
    function CanLightMainTab: Boolean; override;
    procedure DrawTabUnderline(ATabVisibleIndex: Integer); override;
    procedure GetBackgroundGradientColors(ATabVisibleIndex: Integer;
      out AColor1, AColor2: TColor); override;
    function GetButtonsRegionHOffset: Integer; override;
    function GetDrawImageOffset(TabVisibleIndex: Integer): TRect; override;
    function GetDrawTextHOffset(TabVisibleIndex: Integer): TRect; override;
    function GetFrameColor: TColor; override;
    function GetGeometricalMinTabWidth: Integer; override;
    function GetSlantedSides: TcxTabSlantPositions; override;
    function GetTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    function GetTabsContainerOffsets: TRect; override;
    function GetTabsNormalDistance: TcxPCDistance; override;
    function GetTabsRectOffset: TRect; override;
    function InternalGetCutValue: Integer; override;
    function InternalGetTabClipRegion(ATabVisibleIndex: Integer;
      AForContent: Boolean): TcxRegion; override;
    procedure PaintTabFrame(ATabVisibleIndex: Integer; const R: TRect); override;
    procedure PaintTabStateMark(ATabVisibleIndex: Integer); override;
  public
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
  end;

procedure DrawBorder(ACanvas: TcxCanvas; var ARect: TRect; ASides: array of TcxBorder; AColors: array of TColor; AExcludeBorder: Boolean = False);
procedure ExchangeValues(var AValue1, AValue2);
procedure GetRectSize(const R: TRect; AIsHorizontal: Boolean;
  out ARWidth, ARHeight: Integer);
procedure RotateTabsDistance(var ADistance: TcxPCDistance);

var
  cxPCLightBrushColor: TColor;

implementation

uses
  Math, cxLookAndFeelPainters, cxPCPaintersFactory, dxThemeConsts,
  dxThemeManager, dxUxTheme, dxOffice11;

const
  ButtonsPainterTabContentWOffsetA: array[Boolean] of TcxPCWOffset = (
    (Left: 4; Right: 4),
    (Left: 3; Right: 4)
  );

  StandardNativePainterButtonHeight = 17;
  StandardNativePainterButtonWidth = 17;
  StandardPainterButtonHeight = 20;
  StandardPainterButtonWidthA: array [Boolean, TcxPCNavigatorButton] of Integer = (
    (20, 20, 12, 20), // TabPosition in [tpLeft, tpRight]
    (20, 20, 13, 20)  // TabPosition in [tpTop, tpBottom]
  );
  StandardPainterTabBorderWidth = 2;
  StandardPainterDefaultTabNormalHeightA: array [TcxPCStandardStyle] of Integer = (18, 20, 20);
  StandardPainterDefaultTabNormalHTextOffsetA: array [TcxPCStandardStyle] of Integer = (2, 4, 4);
  StandardPainterDrawImageOffsetA: array [Boolean, TcxPCStandardStyle] of TRect = (
   ((Left: 6; Top: 1; Right: 0; Bottom: 0),
    (Left: 6; Top: -1; Right: 0; Bottom: 1),
    (Left: 6; Top: -1; Right: 0; Bottom: 1)
   ),
   ((Left: 8; Top: 1; Right: 0; Bottom: 3),
    (Left: 7; Top: -1; Right: 0; Bottom: 1),
    (Left: 7; Top: -1; Right: 0; Bottom: 1)
   )
  );
  StandardPainterDrawTextHOffsetA: array [Boolean, TcxPCStandardStyle] of TRect = (
   ((Left: 5; Top: 1; Right: 5; Bottom: -1),
    (Left: 6; Top: 0; Right: 4; Bottom: 1),
    (Left: 6; Top: 0; Right: 4; Bottom: 1)
   ),
   ((Left: 5; Top: 1; Right: 5; Bottom: 2),
    (Left: 6; Top: 0; Right: 4; Bottom: 1),
    (Left: 6; Top: 0; Right: 4; Bottom: 1)
   )
  );
  StandardPainterTabContentWOffsetA: array [Boolean, TcxPCStandardStyle] of TcxPCWOffset = (
   ((Left: 2; Right: 2),
    (Left: 3; Right: 3),
    (Left: 2; Right: 2)
   ),
   ((Left: 4; Right: 4),
    (Left: 3; Right: 3),
    (Left: 4; Right: 2)
   )
  );
  StandardPainterTabsNormalDistanceA: array [TcxPCStandardStyle] of TcxPCDistance = (
    (dw: 0; dh: 0),
    (dw: 3; dh: 3),
    (dw: 10; dh: 3)
  );
  StandardPainterMaxTabBorderWidth = 2;
  StandardPainterWDistanceBetweenImageBorderAndText = 1;
  StandardPainterTooNarrowTabContentWOffsetA: array [Boolean, TcxPCStandardStyle] of TcxPCWOffset = (
   ((Left: 2; Right: 2),
    (Left: 3; Right: 3),
    (Left: 2; Right: 2)
   ),
   ((Left: 4; Right: 4),
    (Left: 3; Right: 3),
    (Left: 3; Right: 2)
   )
  );

  TabsPainterContentWOffsetA: array[Boolean, Boolean] of TcxPCWOffset = (
   ((Left: 3; Right: 3),
    (Left: 3; Right: 3)),
   ((Left: 5; Right: 5),
    (Left: 4; Right: 5))
  );
  TabsPainterDrawImageWithoutTextRotatedMainTabWOffset: array[Boolean] of TcxPCWOffset =
    ((Left: 1; Right: 2), (Left: 2; Right: 1));
  TabsPainterButtonBorderWidth = 2;

  ExtraFlatPainterButtonSize = 13;
  ExtraFlatPainterDefaultTabNormalWidth = 0;
  ExtraFlatPainterDrawImageOffsetA: array [Boolean] of TRect = (
    (Left: 2; Top: 0; Right: 0; Bottom: 0),
    (Left: 3; Top: 0; Right: 0; Bottom: 0)
  );
  ExtraFlatPainterDrawTextHOffsetA: array [Boolean] of TRect = (
    (Left: 5; Top: 2; Right: 3; Bottom: 0),
    (Left: 6; Top: 2; Right: 3; Bottom: 0)
  );
  ExtraFlatPainterMainTabBorderWidth = 1;
  ExtraFlatPainterMainTabRectCorrection: TcxPCRectCorrection = (
    dLeft: -1; dTop: -1; dRight: 1; dBottom: 1
  );
  ExtraFlatPainterTabContentWOffset: array [Boolean] of TcxPCWOffset = (
    (Left: 2; Right: 2),
    (Left: 3; Right: 3)
  );
  ExtraFlatPainterWDistanceBetweenImageBorderAndText = 0;
  ExtraFlatPainterTabsRowFreeSpaceWidth = 3;

  ExtraFlatPainterMainTabRowUnderlineWidth = 2;

  ButtonedPainterDistanceBetweenTabsAndClientRects = 2;

  MinTabSelectionDistance: TcxPCDistance = (dw: 4; dh: 4);

  cxPCDarkEdgeColor = clBtnShadow;
  cxPCDarkestEdgeColor = cl3DDkShadow;

⌨️ 快捷键说明

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