cxlookandfeelpainters.pas

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

PAS
1,181
字号

{********************************************************************}
{                                                                    }
{       Developer Express Visual Component Library                   }
{       ExpressCommonLibrary                                         }
{                                                                    }
{       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 EXPRESSCOMMONLIBRARY 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 cxLookAndFeelPainters;

{$I cxVer.inc}

interface

uses
  Windows, dxUxTheme, dxThemeManager, dxOffice11,
{$IFDEF DELPHI6}
  Types,
{$ENDIF}
  Classes, Graphics, Controls, ImgList, cxClasses, cxGraphics, cxGeometry;

const
  cxTextOffset = 2;
  cxHeaderTextOffset = cxTextOffset;

  cxArrowLeftBasePointIndex = 0;
  cxArrowTopPointIndex = 1;
  cxArrowRightBasePointIndex = 2;

  cxStdThumbnailMinimalSize = 8;

type
  TcxLookAndFeelStyle = (lfsFlat, lfsStandard, lfsUltraFlat,
    lfsNative, lfsOffice11);

  TcxArrowDirection = (adUp, adDown, adLeft, adRight);
  TcxArrowPoints = array[0..2] of TPoint;
  TcxEditBtnKind = (cxbkCloseBtn, cxbkComboBtn, cxbkEditorBtn, cxbkEllipsisBtn,
    cxbkSpinUpBtn, cxbkSpinDownBtn, cxbkSpinLeftBtn, cxbkSpinRightBtn);
  TcxButtonState = (cxbsDefault, cxbsNormal, cxbsHot, cxbsPressed, cxbsDisabled);
  TcxCheckBoxState = (cbsUnchecked, cbsChecked, cbsGrayed);
  TcxGroupBoxCaptionPosition = (cxgpTop, cxgpBottom, cxgpLeft, cxgpRight, cxgpCenter);
  TcxHeaderArrows = (haNone, haLeft, haRight, haBoth);
  TcxIndicatorKind = (ikNone, ikArrow, ikEdit, ikInsert, ikMultiDot, ikMultiArrow, ikFilter);
  TcxNeighbor = (nLeft, nTop, nRight, nBottom);
  TcxNeighbors = set of TcxNeighbor;
  TcxScrollBarPart = (sbpNone, sbpLineUp, sbpLineDown, sbpThumbnail,
    sbpPageUp, sbpPageDown);
  TcxPopupBorderStyle = (pbsNone, pbsUltraFlat, pbsFlat, pbs3D);
  TcxTrackBarTicksAlign = (tbtaUp, tbtaDown, tbtaBoth);

  TcxDrawBackgroundEvent = function(ACanvas: TcxCanvas; const ABounds: TRect): Boolean of object;
  TcxCustomLookAndFeelPainterClass = class of TcxCustomLookAndFeelPainter;

  IcxLookAndFeelPainterListener = interface 
  ['{7665EF58-2C4B-48B9-E1BE-BD5E135CA88F}']
    procedure PainterChanged(APainter: TcxCustomLookAndFeelPainterClass);
  end;

  TcxCustomLookAndFeelPainter = class
  protected
    class procedure DrawBackground(ACanvas: TcxCanvas; const ARect: TRect;
      ATransparent: Boolean; ABackgroundColor: TColor; const ABackgroundBitmap: TBitmap); virtual;
    class procedure DrawButtonArrow(ACanvas: TcxCanvas; const R: TRect; AColor: TColor); virtual;
    class procedure DrawContent(ACanvas: TcxCanvas; const ABounds, ATextAreaBounds: TRect; AState: Integer;
      AAlignmentHorz: TAlignment; AAlignmentVert: TcxAlignmentVert; AMultiLine, AShowEndEllipsis: Boolean;
      const AText: string; AFont: TFont; ATextColor, ABkColor: TColor;
      AOnDrawBackground: TcxDrawBackgroundEvent = nil; AIsFooter: Boolean = False); virtual;
    class procedure DrawExpandButtonCross(ACanvas: TcxCanvas; const R: TRect;
      AExpanded: Boolean; AColor: TColor);
    class procedure DrawGroupExpandButtonMark(ACanvas: TcxCanvas; const R: TRect;
      AExpanded: Boolean; AState: TcxButtonState);
    class procedure DrawMonthHeaderArrows(ACanvas: TcxCanvas; const ABounds: TRect;
      AArrows: TcxHeaderArrows; ASideWidth: Integer; AColor: TColor);
    class procedure DrawSortingArrow(ACanvas: TcxCanvas; const R: TRect;
      AColor1, AColor2: TColor; AAscendingSorting: Boolean);
    class procedure DrawSchedulerNavigationButtonContent(ACanvas: TcxCanvas;
      const ARect: TRect; const AArrowRect: TRect; AIsNextButton: Boolean;
      AState: TcxButtonState); virtual;
    class function FooterCellContentBounds(const ABounds: TRect): TRect; virtual;
    class function FooterCellTextAreaBounds(const ABounds: TRect): TRect; virtual;
    class function GetArrowDirection(AHorizontal: Boolean; APart: TcxScrollBarPart): TcxArrowDirection;
  public
    class function LookAndFeelStyle: TcxLookAndFeelStyle; virtual;
    // colors
    class function DefaultContentColor: TColor; virtual;
    class function DefaultContentEvenColor: TColor; virtual;
    class function DefaultContentOddColor: TColor; virtual;
    class function DefaultContentTextColor: TColor; virtual;
    class function DefaultEditorBackgroundColor(AIsDisabled: Boolean): TColor; virtual;
    class function DefaultEditorTextColor(AIsDisabled: Boolean): TColor; virtual;
    class function DefaultFilterBoxColor: TColor; virtual;
    class function DefaultFilterBoxTextColor: TColor; virtual;
    class function DefaultFixedSeparatorColor: TColor; virtual;
    class function DefaultFooterColor: TColor; virtual;
    class function DefaultFooterTextColor: TColor; virtual;
    class function DefaultGridDetailsSiteColor: TColor; virtual;
    class function DefaultGridLineColor: TColor; virtual;
    class function DefaultGroupByBoxColor: TColor; virtual;
    class function DefaultGroupByBoxTextColor: TColor; virtual;
    class function DefaultGroupColor: TColor; virtual;
    class function DefaultGroupTextColor: TColor; virtual;
    class function DefaultHeaderBackgroundColor: TColor; virtual;
    class function DefaultHeaderBackgroundTextColor: TColor; virtual;
    class function DefaultHeaderColor: TColor; virtual;
    class function DefaultHeaderTextColor: TColor; virtual;
    class function DefaultHyperlinkTextColor: TColor; virtual;
    class function DefaultInactiveColor: TColor; virtual;
    class function DefaultInactiveTextColor: TColor; virtual;
    class function DefaultPreviewTextColor: TColor; virtual;
    class function DefaultRecordSeparatorColor: TColor; virtual;
    class function DefaultSizeGripAreaColor: TColor; virtual;

    class function DefaultVGridCategoryColor: TColor; virtual;
    class function DefaultVGridCategoryTextColor: TColor; virtual;
    class function DefaultVGridLineColor: TColor; virtual;
    class function DefaultVGridBandLineColor: TColor; virtual;

    class function DefaultDateNavigatorHeaderColor: TColor; virtual;
    class function DefaultDateNavigatorSelectionColor: TColor; virtual;
    class function DefaultDateNavigatorSelectionTextColor: TColor; virtual;

    class function DefaultSchedulerBackgroundColor: TColor; virtual;
    class function DefaultSchedulerTextColor: TColor; virtual;
    class function DefaultSchedulerBorderColor: TColor; virtual;
    class function DefaultSchedulerControlColor: TColor; virtual;
    class function DefaultSchedulerNavigatorColor: TColor; virtual;
    class function DefaultSchedulerViewContentColor: TColor; virtual;
    class function DefaultSchedulerViewSelectedTextColor: TColor; virtual;
    class function DefaultSchedulerViewTextColor: TColor; virtual;
    class function DefaultSelectionColor: TColor; virtual;
    class function DefaultSelectionTextColor: TColor; virtual;
    class function DefaultSeparatorColor: TColor; virtual;
    class function DefaultTabColor: TColor; virtual;
    class function DefaultTabTextColor: TColor; virtual;
    class function DefaultTabsBackgroundColor: TColor; virtual;

    class function DefaultTimeGridMajorScaleColor: TColor; virtual;
    class function DefaultTimeGridMajorScaleTextColor: TColor; virtual;
    class function DefaultTimeGridMinorScaleColor: TColor; virtual;
    class function DefaultTimeGridMinorScaleTextColor: TColor; virtual;
    class function DefaultTimeGridSelectionBarColor: TColor; virtual;

    class function DefaultChartDiagramValueBorderColor: TColor; virtual;
    class function DefaultChartDiagramValueCaptionTextColor: TColor; virtual;
    class function DefaultChartHistogramAxisColor: TColor; virtual;
    class function DefaultChartHistogramGridLineColor: TColor; virtual;
    class function DefaultChartHistogramPlotColor: TColor; virtual;
    class function DefaultChartPieDiagramSeriesSiteBorderColor: TColor; virtual;
    class function DefaultChartPieDiagramSeriesSiteCaptionColor: TColor; virtual;
    class function DefaultChartPieDiagramSeriesSiteCaptionTextColor: TColor; virtual;
    class function DefaultChartToolBoxDataLevelInfoBorderColor: TColor; virtual;
    class function DefaultChartToolBoxItemSeparatorColor: TColor; virtual;

    // arrow
    class procedure CalculateArrowPoints(R: TRect; var P: TcxArrowPoints; AArrowDirection: TcxArrowDirection; AProportional: Boolean; AArrowSize: Integer = 0);
    class procedure DrawArrow(ACanvas: TcxCanvas; const R: TRect; AArrowDirection: TcxArrowDirection; AColor: TColor); overload; virtual;
    class procedure DrawArrow(ACanvas: TcxCanvas; const R: TRect; AState: TcxButtonState; AArrowDirection: TcxArrowDirection; ADrawBorder: Boolean = True); overload; virtual;
    class procedure DrawArrowBorder(ACanvas: TcxCanvas; const R: TRect; AState: TcxButtonState); virtual;
    class procedure DrawScrollBarArrow(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState; AArrowDirection: TcxArrowDirection); virtual;
    // border
    class function BorderSize: Integer; virtual;
    class procedure DrawBorder(ACanvas: TcxCanvas; R: TRect); virtual;
    // buttons
    class function AdjustGroupButtonDisplayRect(const R: TRect; AButtonCount, AButtonIndex: Integer): TRect; virtual;
    class function ButtonBorderSize(AState: TcxButtonState = cxbsNormal): Integer; virtual; // abstract;
    class function ButtonColor(AState: TcxButtonState): TColor; virtual;
    class function ButtonFocusRect(ACanvas: TcxCanvas; R: TRect): TRect; virtual;
    class function ButtonGroupBorderSizes(AButtonCount, AButtonIndex: Integer): TRect; virtual;
    class function ButtonTextOffset: Integer; virtual; // abstract;
    class function ButtonTextShift: Integer; virtual; // abstract;
    class function ButtonSymbolColor(AState: TcxButtonState;
      ADefaultColor: TColor = clDefault): TColor; virtual;
    class function ButtonSymbolState(AState: TcxButtonState): TcxButtonState; virtual;
    class procedure DrawButton(ACanvas: TcxCanvas; R: TRect; const ACaption: string;
      AState: TcxButtonState; ADrawBorder: Boolean = True; AColor: TColor = clDefault;
      ATextColor: TColor = clDefault; AWordWrap: Boolean = False); virtual;
    class procedure DrawButtonCross(ACanvas: TcxCanvas; const R: TRect; AColor: TColor;
      AState: TcxButtonState);
    class procedure DrawButtonInGroup(ACanvas: TcxCanvas; R: TRect;
      AState: TcxButtonState; AButtonCount, AButtonIndex: Integer;
      ABackgroundColor: TColor); virtual;
    class procedure DrawButtonBorder(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState); virtual; // abstract;
    class procedure DrawButtonGroupBorder(ACanvas: TcxCanvas; R: TRect; AInplace, ASelected: Boolean); virtual;
    class procedure DrawExpandButton(ACanvas: TcxCanvas; const R: TRect; AExpanded: Boolean; AColor: TColor = clDefault); virtual; // abstract;
    class function DrawExpandButtonFirst: Boolean; virtual;
    class procedure DrawGroupExpandButton(ACanvas: TcxCanvas; const R: TRect; AExpanded: Boolean; AState: TcxButtonState); virtual; // abstract
    class procedure DrawSmallExpandButton(ACanvas: TcxCanvas; R: TRect; AExpanded: Boolean;
      ABorderColor: TColor; AColor: TColor = clDefault); virtual;
    class function ExpandButtonSize: Integer; virtual; // abstract;
    class function GroupExpandButtonSize: Integer; virtual; // abstract;
    class function IsButtonHotTrack: Boolean; virtual; // abstract;
    class function IsPointOverGroupExpandButton(const R: TRect; const P: TPoint): Boolean; virtual;
    class function SmallExpandButtonSize: Integer; virtual;
    // checkbox
    class function CheckBorderSize: Integer; virtual;
    class function CheckButtonColor(AState: TcxButtonState): TColor; virtual;
    class function CheckButtonSize: TSize; virtual;
    class procedure DrawCheck(ACanvas: TcxCanvas; const R: TRect; AState: TcxButtonState;
      AChecked: Boolean; AColor: TColor); virtual;
    class procedure DrawCheckBorder(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState); virtual; // abstract;
    class procedure DrawCheckButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState;
      AChecked: Boolean); overload; virtual;
    class procedure DrawCheckButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState;
      ACheckState: TcxCheckBoxState); overload; virtual;
    // RadioButton
    class procedure DrawRadioButton(ACanvas: TcxCanvas; X, Y: Integer;
      AButtonState: TcxButtonState; AChecked, AFocused: Boolean;
      ABrushColor: TColor;  AIsDesigning: Boolean = False); virtual;
    class function RadioButtonSize: TSize; virtual;

⌨️ 快捷键说明

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