cxpcpainters.pas

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

PAS
1,694
字号

{********************************************************************}
{                                                                    }
{       Developer Express Visual Component Library                   }
{       ExpressPageControl                                           }
{                                                                    }
{       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 EXPRESSPAGECONTROL 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 cxPCPainters;

{$I cxVer.inc}

interface

uses
  Windows, Classes, Controls, Graphics, SysUtils, cxGraphics, cxLookAndFeels,
  cxPC;

const
  cxPCEmptyWOffset: TcxPCWOffset = (Left: 0; Right: 0);

  cxPCTabsStyle = 1;
  cxPCButtonsStyle = 2;
  cxPCFlatButtonsStyle = 3;
  cxPCExtraFlatStyle = 5;
  cxPCUltraFlatStyle = 6;
  cxPCFlatStyle = 7;
  cxPCOffice11Style = 8;
  cxPCSlantedStyle = 9;
  cxPCOneNoteStyle = 10;
  cxPCSkinStyle = 11;

  StandardPainterTabControlFrameBorderWidth = 2;

type
  TcxPCNavigatorButtonPosition = record
    Button: TcxPCNavigatorButton;
    ButtonRect: TRect;
  end;
  TcxPCNavigatorButtonPositions = array of TcxPCNavigatorButtonPosition;

  TcxPCTabsDelimiterOffsets = record
    Top, Bottom: Integer;
  end;

  TcxPCArrow = (aTop, aBottom, aLeft, aRight);

  TcxPCNavigatorButtonContentParameters = record
    BrushColor: TColor;
    Color: TColor;
    Enabled: Boolean;
    LiteStyle: Boolean;
  end;

  TLinePosition = (lpL, lpLT, lpT, lpRT, lpR, lpRB, lpB, lpLB);
  TLinePositions = array of TLinePosition;

  TPoints = array of TPoint;

  { TcxPCStandardPainter }

  TcxPCStandardPainter = class(TcxPCCustomPainter)
  private
    FButtonsQueue: TcxPCNavigatorButtonPositions;
    FButtonsRect: TRect;
    function GetButtonsWidth(ANavigatorButtons: TcxPCNavigatorButtons): Integer;
  protected
    function CalculateTabNormalWidth(Tab: TcxTab): Integer; override;
    function GetDrawImageOffset(TabVisibleIndex: Integer): TRect; override;
    function GetDrawImageWithoutTextWOffset(TabVisibleIndex: Integer): TcxPCWOffset; override;
    function GetDrawTextHOffset(TabVisibleIndex: Integer): TRect; override;
    function GetFrameWidth: Integer; override;
    function GetGoDialogPosition(GoDialogSize: TSize): TPoint; override;
    function GetImageTextDistance(ATabVisibleIndex: Integer): Integer; override;
    function GetMinTabNormalWidth(ATabVisibleIndex: Integer): Integer; override;
    function GetMinTabSelectionDistance: TcxPCDistance; override;
    function GetTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    function GetTabsNormalDistance: TcxPCDistance; override;
    function GetTabsPosition(NavigatorButtons: TcxPCNavigatorButtons): TcxPCTabsPosition; override;
    function GetTooNarrowTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    procedure InternalPrepareOutTabImageAndTextData(ATabVisibleIndex: Integer;
      var AImageRect, ATextRect: TRect); override;
    function IsOverButton(X, Y: Integer; var Button: TcxPCNavigatorButton): Boolean; override;
    function IsTabBorderThick(ATabVisibleIndex: Integer): Boolean; override;
    procedure Paint; override;
    procedure PaintButtonsRegion; override;
    procedure PaintTab(TabVisibleIndex: Integer); virtual;
    procedure PaintTabsRegion; override;
    procedure RepaintButton(Button: TcxPCNavigatorButton; OldButtonState: TcxPCNavigatorButtonState); override;
    procedure RepaintButtonsRegion; override;
    procedure RepaintTab(TabVisibleIndex: Integer; TabPropertyChanged: TcxPCTabPropertyChanged); override;

    procedure CalculateButtonContentParameters(AButton: TcxPCNavigatorButton;
      out AParameters: TcxPCNavigatorButtonContentParameters); virtual;
    procedure CalculateButtonsRect(NavigatorButtons: TcxPCNavigatorButtons); virtual;
    procedure CalculateButtonsRegion(NavigatorButtons: TcxPCNavigatorButtons); virtual;
    function CalculateButtonsRegionWidth(NavigatorButtons: TcxPCNavigatorButtons): Integer; virtual;
    procedure CorrectTabHeightForImage(var AHeight: Integer);
    procedure DrawButtonContent(AButton: TcxPCNavigatorButton;
      const AParameters: TcxPCNavigatorButtonContentParameters;
      AContentRectLeftTopCorner: TPoint);
    function Get3DButtonContentPosition(AButton: TcxPCNavigatorButton): TPoint;
    function GetButtonArrow(AButton: TcxPCNavigatorButton): TcxPCArrow;
    function GetButtonCenteredContentPosition(AButton: TcxPCNavigatorButton): TPoint;
    function GetButtonColor(AButtonState: TcxPCNavigatorButtonState): TColor; virtual;
    function GetButtonContentColor(AButtonState: TcxPCNavigatorButtonState): TColor; virtual;
    function GetButtonContentPosition(AButton: TcxPCNavigatorButton): TPoint; virtual;
    function GetButtonHeight: Integer; virtual;
    function GetButtonWidth(Button: TcxPCNavigatorButton): Integer; virtual;
    function GetDefaultTabNormalHeight: Integer; virtual;
    function GetDefaultTabNormalHTextOffset: Integer; virtual;
    function GetDefaultTabNormalWidth: Integer; virtual;
    function GetFrameRect: TRect;
    function GetFreeSpaceColor: TColor; virtual;
    function GetMinFrameRectSize: Integer; virtual;
    function GetTabBorderWidth(Tab: TcxTab): Integer; virtual;
    function GetTabNormalWidth(ATabVisibleIndex: Integer): Integer; virtual;
    function GetTabsRectOffset: TRect; virtual;
    function InternalCalculateTabNormalHeight: Integer; virtual;
    procedure InternalDrawEdge(const Rect: TRect; Sunken: Boolean; ThinFrame: Boolean = False);
    procedure InternalDrawFocusRect(TabVisibleIndex: Integer; R: TRect); virtual;
    procedure PaintButton(Button: TcxPCNavigatorButton;
      const ButtonRect: TRect); virtual;
    procedure PaintButtonBackground(AButtonRect: TRect;
      AButtonState: TcxPCNavigatorButtonState); virtual;
    procedure PaintButtonFrame(var ARect: TRect;
      AButtonState: TcxPCNavigatorButtonState); virtual;
    procedure PaintFrame; override;
    procedure PaintFrameBorder(R: TRect); virtual;
    procedure PaintTabShape(ATab: TcxTab; ATabVisibleIndex: Integer); virtual; abstract;
    procedure PrepareTabBackground(ATab: TcxTab; ATabVisibleIndex: Integer); virtual;
    procedure GetButtonsOrder(ANavigatorButtons: TcxPCNavigatorButtons;
      var AButtonPositions: TcxPCNavigatorButtonPositions); virtual;
    property ButtonsRect: TRect read FButtonsRect;
  public
    constructor Create(AParent: TcxCustomTabControl); override;
    destructor Destroy; override;
    function CalculateTabNormalHeight: Integer; override;
    function GetGoDialogButtonBounds: TRect; override;
    class function IsMainTabBoundWithClient: boolean; override;
    class function IsMultiSelectionAccepted: boolean; override;
    class function IsStandardStyle: Boolean; override;
    class function IsTabPressable: Boolean; override;
  end;

  { TcxPCButtonedPainter }

  TcxPCButtonedPainter = class(TcxPCStandardPainter)
  private
    MainTabBrushBitmap: TBitmap;
  protected
    function GetButtonContentPosition(AButton: TcxPCNavigatorButton): TPoint; override;
    function GetButtonsRegionHOffset: Integer; override;
    function GetButtonsRegionWOffset: Integer; override;
    function GetDisplayRectOffset: TRect; override;
    function GetTabBodyColor(TabVisibleIndex: Integer): TColor; override;
    function GetTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    function GetTabsContainerOffsets: TRect; override;
    function GetTooNarrowTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    function IsTabBorderThick(ATabVisibleIndex: Integer): Boolean; override;
  public
    constructor Create(AParent: TcxCustomTabControl); override;
    destructor Destroy; override;
  end;

  { TcxPCTabsPainter }

  TcxPCTabsPainter = class(TcxPCStandardPainter)
  private
{    FMDC: HDC;
    FPrevMDCBitmap: HBITMAP;}
  protected
    procedure CorrectTabRect(TabVisibleIndex: Integer;
      var TabRectCorrection: TcxPCRectCorrection); override;
    procedure DrawNativeTabBackground(DC: HDC; ATab: TcxTabSheet); override;
    function GetButtonContentPosition(AButton: TcxPCNavigatorButton): TPoint; override;
    function GetButtonHeight: Integer; override;
    function GetButtonsRegionHOffset: Integer; override;
    function GetButtonsRegionWOffset: Integer; override;
    function GetButtonWidth(Button: TcxPCNavigatorButton): Integer; override;
    function GetClientRectOffset: TRect; override;
    function GetDisplayRectOffset: TRect; override;
    function GetDrawImageOffset(TabVisibleIndex: Integer): TRect; override;
    function GetDrawImageWithoutTextWOffset(TabVisibleIndex: Integer): TcxPCWOffset; override;
    function GetDrawTextHOffset(TabVisibleIndex: Integer): TRect; override;
    function GetImageTextDistance(ATabVisibleIndex: Integer): Integer; override;
    function GetTabBodyColor(TabVisibleIndex: Integer): TColor; override;
    function GetTabClipRgn(ATabVisibleIndex: Integer): TcxRegion; override;
    function GetTabClipRgnOperation(ATabVisibleIndex: Integer): TcxRegionOperation; override;
    function GetTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    procedure GetTabNativePartAndState(ATabVisibleIndex: Integer;
      out PartId, StateId: Integer); override;
    function GetTabsContainerOffsets: TRect; override;
    function GetTabsPosition(NavigatorButtons: TcxPCNavigatorButtons): TcxPCTabsPosition; override;
    function GetTooNarrowTabContentWOffset(
      ATabVisibleIndex: Integer): TcxPCWOffset; override;
    function InternalCalculateTabNormalHeight: Integer; override;
    procedure InternalPrepareOutTabImageAndTextData(ATabVisibleIndex: Integer;
      var AImageRect, ATextRect: TRect); override;
    procedure InvalidateTabRect(ATabVisibleIndex: Integer); override;
    function IsNativePainting: Boolean; override;
    function IsOverTab(TabVisibleIndex: Integer; X, Y: Integer): Boolean; override;
    function NeedShowFrame: Boolean; override;
    procedure Paint; override;
    procedure PaintButton(Button: TcxPCNavigatorButton;
      const ButtonRect: TRect); override;
    procedure PaintClientArea; override;
    procedure PaintFrame; override;
    procedure PaintTabShape(ATab: TcxTab; ATabVisibleIndex: Integer); override;
    procedure PaintTabsRegion; override;
    procedure PaintNativeTabBackground(DC: HDC; ATabVisibleIndex: Integer; const ABounds: TRect); virtual;
//    procedure PrepareBackgroundBitmap; virtual;
    procedure PrepareTabBackground(ATab: TcxTab; ATabVisibleIndex: Integer); override;
    procedure PrepareTabBitmapBackground(ABitmap: TBitmap; const ARect: TRect; ATab: TcxTab); virtual;
    procedure RepaintTab(TabVisibleIndex: Integer; TabPropertyChanged: TcxPCTabPropertyChanged); override;
    function GetMinFrameRectSize: Integer; override;
    procedure GetTabCornersColor(ATabVisibleIndex: Integer;
      out AColor1, AColor2: TColor); virtual;
    procedure PaintTabCorners(ATabVisibleIndex: Integer); virtual;
    procedure PaintTabFrame(ATabVisibleIndex: Integer); virtual;
    procedure InternalPaintFrame(ACanvas: TCanvas); virtual;
  public
    class function GetStandardStyle: TcxPCStandardStyle; override;
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
    class function IsDefault(ALookAndFeel: TcxLookAndFeel): Boolean; override;
  end;

  { TcxPCButtonsPainter }

  TcxPCButtonsPainter = class(TcxPCButtonedPainter)
  protected
    function IsTabBorderThick(ATabVisibleIndex: Integer): Boolean; override;
    procedure PaintTabShape(ATab: TcxTab; ATabVisibleIndex: Integer); override;
  public
    class function GetStandardStyle: TcxPCStandardStyle; override;
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
  end;

  { TcxPCFlatButtonsPainter }

  TcxPCFlatButtonsPainter = class(TcxPCButtonedPainter)
  protected
    procedure PaintTab(TabVisibleIndex: Integer); override;
    procedure PaintTabShape(ATab: TcxTab; ATabVisibleIndex: Integer); override;
  public
    class function GetStandardStyle: TcxPCStandardStyle; override;
    class function GetStyleID: TcxPCStyleID; override;
    class function GetStyleName: TCaption; override;
    class function HasLookAndFeel(ALookAndFeel: TcxLookAndFeel): Boolean; override;
  end;

  { TcxPCExtraFlatPainter }

  TcxPCExtraFlatPainter = class(TcxPCStandardPainter)
  protected
    procedure CalculateButtonContentParameters(AButton: TcxPCNavigatorButton;
      out AParameters: TcxPCNavigatorButtonContentParameters); override;
    function CalculateTabNormalWidth(Tab: TcxTab): Integer; override;
    procedure CorrectTabRect(TabVisibleIndex: Integer; var TabRectCorrection: TcxPCRectCorrection); override;
    function GetButtonColor(AButtonState: TcxPCNavigatorButtonState): TColor; override;
    function GetButtonContentColor(AButtonState: TcxPCNavigatorButtonState): TColor; override;
    function GetButtonContentPosition(AButton: TcxPCNavigatorButton): TPoint; override;
    function GetButtonHeight: Integer; override;
    function GetButtonWidth(Button: TcxPCNavigatorButton): Integer; override;
    function GetClientRectOffset: TRect; override;
    function GetDefaultClientColor: TColor; override;
    function GetDefaultTabNormalHeight: Integer; override;
    function GetDefaultTabNormalHTextOffset: Integer; override;
    function GetDisplayRectOffset: TRect; override;
    function GetDrawImageOffset(TabVisibleIndex: Integer): TRect; override;
    function GetDrawTextHOffset(TabVisibleIndex: Integer): TRect; override;
    function GetFrameWidth: Integer; override;
    function GetFreeSpaceColor: TColor; override;
    function GetMinTabNormalWidth(ATabVisibleIndex: Integer): Integer; override;
    function GetTabBodyColor(TabVisibleIndex: Integer): TColor; override;
    function GetTabBorderWidth(Tab: TcxTab = nil): Integer; override;
    function GetTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    function GetTabNormalWidth(ATabVisibleIndex: Integer): Integer; override;
    function GetTabsRowsDelimiterWidth: Integer; virtual;
    function GetTabsNormalDistance: TcxPCDistance; override;
    function GetTabsPosition(NavigatorButtons: TcxPCNavigatorButtons): TcxPCTabsPosition; override;
    function GetTooNarrowTabContentWOffset(ATabVisibleIndex: Integer): TcxPCWOffset; override;
    function InternalCalculateTabNormalHeight: Integer; override;
    procedure InternalPaint; override;
    procedure PaintButtonFrame(var ARect: TRect;
      AButtonState: TcxPCNavigatorButtonState); override;
    procedure PaintClientArea; override;
    procedure PaintFrame; override;
    procedure PaintTabShape(ATab: TcxTab; ATabVisibleIndex: Integer); override;
    procedure PaintTabsRegion; override;
    procedure RepaintTab(TabVisibleIndex: Integer; TabPropertyChanged: TcxPCTabPropertyChanged); override;
    function GetButtonsDistance(AButton1, AButton2: TcxPCNavigatorButton): Integer; override;
    function GetButtonsRegionHOffset: Integer; override;
    function GetButtonsRegionWOffset: Integer; override;
    function GetFocusRect: TRect; virtual;
    function GetTabsDelimiterOffsets: TcxPCTabsDelimiterOffsets; virtual;
    procedure DrawBackground(ACanvas: TCanvas; ARect: TRect;
      ATabVisibleIndex: Integer); virtual;
    procedure ExcludeUnderLine(var R: TRect); virtual;
    function GetMainTabRowUnderlineColor: TColor; virtual;
    function GetMainTabRowUnderlineRect: TRect; virtual;
    function GetTabBackgroundRect(ATabVisibleIndex: Integer;
      AForNormalState: Boolean): TRect; virtual;
    function GetTabsDelimiterWidth: Integer; virtual;
    function GetTabsRowColor: TColor; virtual;
    function GetTabsRowRect(ARowIndex: Integer): TRect;
    procedure InternalPaintFrame(ALeftTopColor, ARightBottomColor: TColor);
    procedure InternalPaintMainTabFrame(var R: TRect; ALightColor, ADarkColor: TColor);

⌨️ 快捷键说明

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