⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxribbonskins.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 5 页
字号:

    procedure DrawDropDownGalleryVerticalSizeGrip(DC: HDC; const R: TRect);

    procedure LoadFormSkin;
    procedure LoadRibbonSkin;

    procedure LoadCommonRibbonSkinBitmap(out ABitmap: GpBitmap); virtual;
    procedure LoadCustomRibbonSkinBitmap(out ABitmap: GpBitmap); virtual; abstract;
    procedure LoadFormSkinBitmap(out ABitmap: GpBitmap); virtual; abstract;

    procedure LoadCommonControlSkinFromBitmap(ABitmap: GpBitmap); virtual;
    procedure LoadCustomControlSkinFromBitmap(ABitmap: GpBitmap); virtual;
    procedure LoadFormSkinFromBitmap(ABitmap: GpBitmap); virtual;

    procedure LoadApplicationButton(ABitmap: GpBitmap); virtual;
    procedure LoadBorderIcons(ABitmap: GpBitmap); virtual;
    procedure LoadCustomButtonParts(ABitmap: GpBitmap); virtual;
    procedure LoadCustomGroup(ABitmap: GpBitmap); virtual;
    procedure LoadCustomMenuParts(ABitmap: GpBitmap); virtual;
    procedure LoadCustomProgressParts(ABitmap: GpBitmap); virtual;
    procedure LoadCustomScrollArrow(ABitmap: GpBitmap); virtual;
    procedure LoadCustomScreenTip(ABitmap: GpBitmap); virtual;
    procedure LoadGallery(ABitmap: GpBitmap); virtual;
    procedure LoadTab(ABitmap: GpBitmap);
    procedure LoadScrollButtons(ABitmap: GpBitmap);
    procedure LoadCollapsedToolbar(ABitmap: GpBitmap);
    procedure LoadQAT(ABitmap: GpBitmap);
    procedure LoadStatusBar(ABitmap: GpBitmap);

    property LowColors: Boolean read FLowColors write FLowColors;
  public
    constructor Create;

    procedure LoadElementParts(ABitmap: GpBitmap;
      var AParts; const R: TRect; AID: Integer; const AFixedSize: TRect;
      const AImageIndexes: array of Byte; const APossibleStates: TdxByteSet = [];
      AIsTopDown: Boolean = True; AInterpolationMode: Integer = InterpolationModeDefault);

    procedure LoadBitmapFromStream(const AResName: string; out ABitmap: GpBitmap);
    procedure LoadElementPartsFromFile(const AFileName: string;
      var AParts; AID: Integer; const AFixedSize: TRect;
      const AImageIndexes: array of Byte; const APossibleStates: TdxByteSet = []);

    procedure DrawApplicationButton(DC: HDC; const R: TRect; AState: TdxApplicationButtonState); virtual;
    procedure DrawApplicationMenuButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawApplicationMenuBorder(DC: HDC; const R: TRect); virtual;
    procedure DrawApplicationMenuContentHeader(DC: HDC; const R: TRect); virtual;
    procedure DrawApplicationMenuContentFooter(DC: HDC; const R: TRect); virtual;
    procedure DrawArrowDown(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawMenuArrowDown(DC: HDC; const R: TRect); virtual;
    procedure DrawMenuArrowRight(DC: HDC; const R: TRect); virtual;
    procedure DrawButtonGroup(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawButtonGroupBorderLeft(DC: HDC; const R: TRect); virtual;
    procedure DrawButtonGroupBorderMiddle(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawButtonGroupBorderRight(DC: HDC; const R: TRect); virtual;
    procedure DrawButtonGroupSplitButtonSeparator(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawCollapsedToolbarBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawCollapsedToolbarGlyphBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawDropDownBorder(DC: HDC; const R: TRect); virtual;
    procedure DrawDropDownGalleryBackground(DC: HDC; const R: TRect); virtual;
    procedure DrawDropDownGalleryBottomSizeGrip(DC: HDC; const R: TRect); virtual;
    procedure DrawDropDownGalleryBottomSizingBand(DC: HDC; const R: TRect); virtual;
    procedure DrawDropDownGalleryBottomVerticalSizeGrip(DC: HDC; const R: TRect); virtual;
    procedure DrawDropDownGalleryTopSizeGrip(DC: HDC; const R: TRect); virtual;
    procedure DrawDropDownGalleryTopSizingBand(DC: HDC; const R: TRect); virtual;
    procedure DrawDropDownGalleryTopVerticalSizeGrip(DC: HDC; const R: TRect); virtual;
    procedure DrawEditArrowButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawEditButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawEditEllipsisButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawEditSpinDownButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawEditSpinUpButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawFormBorders(DC: HDC; const ABordersWidth: TRect;
      ACaptionHeight: Integer; const AData: TdxRibbonFormData); virtual;
    procedure DrawFormBorderIcon(DC: HDC; const R: TRect; AIcon: TdxBorderDrawIcon; AState: TdxBorderIconState); virtual;
    procedure DrawFormCaption(DC: HDC; const R: TRect; const AData: TdxRibbonFormData); virtual;
    procedure DrawFormStatusBarPart(DC: HDC; const R: TRect; AIsLeft, AIsActive, AIsRaised, AIsRectangular: Boolean); virtual;
    procedure DrawHelpButton(DC: HDC; const R: TRect; AState: TdxBorderIconState); virtual;
    procedure DrawHelpButtonGlyph(DC: HDC; const R: TRect; AGlyph: TBitmap); virtual;
    procedure DrawGalleryFilterBandBackground(DC: HDC; const R: TRect); virtual;
    procedure DrawGalleryGroupHeaderBackground(DC: HDC; const R: TRect); virtual;
    procedure DrawGroupScrollButton(DC: HDC; const R: TRect; ALeft: Boolean; AState: Integer); virtual;
    procedure DrawInRibbonGalleryBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawInRibbonGalleryScrollBarButton(DC: HDC; const R: TRect;
      AButtonKind: TdxInRibbonGalleryScrollBarButtonKind; AState: Integer); virtual;
    procedure DrawLargeButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawLargeButtonGlyphBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawLargeButtonDropButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawLaunchButtonBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawLaunchButtonDefaultGlyph(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawMDIButton(DC: HDC; const R: TRect; AButton: TdxBarMDIButton; AState: TdxBorderIconState); virtual;
    procedure DrawMDIButtonGlyph(DC: HDC; const R: TRect; AButton: TdxBarMDIButton; AState: TdxBorderIconState); virtual;
    procedure DrawMenuCheck(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawMenuCheckMark(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawMenuContent(DC: HDC; const R: TRect); virtual;
    procedure DrawMenuDetachCaption(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawMenuGlyph(DC: HDC; const R: TRect); virtual;
    procedure DrawMenuMark(DC: HDC; const R: TRect); virtual;
    procedure DrawMenuSeparatorHorz(DC: HDC; const R: TRect); virtual;
    procedure DrawMenuSeparatorVert(DC: HDC; const R: TRect); virtual;
    procedure DrawMenuScrollArea(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawProgressSolidBand(DC: HDC; const R: TRect); virtual;
    procedure DrawProgressSubstrate(DC: HDC; const R: TRect); virtual;
    procedure DrawProgressDiscreteBand(DC: HDC; const R: TRect); virtual;
    procedure DrawRibbonBackground(DC: HDC; const R: TRect); virtual;
    procedure DrawRibbonBottomBorder(DC: HDC; const R: TRect); virtual;
    procedure DrawRibbonClientTopArea(DC: HDC; const R: TRect); virtual;
    procedure DrawSmallButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawSmallButtonGlyphBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawSmallButtonDropButton(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawScrollArrow(DC: HDC; const R: TRect); virtual;
    procedure DrawScreenTip(DC: HDC; const R: TRect); virtual;
    procedure DrawTab(DC: HDC; const R: TRect; AState: TdxRibbonTabState); virtual;
    procedure DrawTabGroupBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawTabGroupHeaderBackground(DC: HDC; const R: TRect; AState: Integer); virtual;

    procedure DrawMarkArrow(DC: HDC; const R: TRect; AState: Integer); virtual;
    procedure DrawMarkTruncated(DC: HDC; const R: TRect; AState: Integer); virtual;

    procedure DrawTabGroupsArea(DC: HDC; const R: TRect); virtual;
    procedure DrawTabScrollButton(DC: HDC; const R: TRect; ALeft: Boolean; AState: Integer); virtual;
    procedure DrawTabSeparator(DC: HDC; const R: TRect; Alpha: Byte); virtual;
    procedure DrawQuickAccessToolbar(DC: HDC; const R: TRect;
      ABellow, ANonClientDraw, AHasApplicationButton, AIsActive, ADontUseAero: Boolean); virtual;
    procedure DrawQuickAccessToolbarDefaultGlyph(DC: HDC; const R: TRect); virtual;
    procedure DrawQuickAccessToolbarGroupButton(DC: HDC; const R: TRect;
      ABellow, ANonClientDraw, AIsActive: Boolean; AState: Integer); virtual;
    procedure DrawQuickAccessToolbarPopup(DC: HDC; const R: TRect); virtual;

    procedure DrawStatusBar(DC: HDC; const R: TRect); virtual;
    procedure DrawStatusBarGripBackground(DC: HDC; const R: TRect); virtual;
    procedure DrawStatusBarPanel(DC: HDC; const Bounds, R: TRect; AIsLowered: Boolean); virtual;
    procedure DrawStatusBarPanelSeparator(DC: HDC; const R: TRect); virtual;
    procedure DrawStatusBarSizeGrip(DC: HDC; const R: TRect); virtual;
    procedure DrawStatusBarToolbarSeparator(DC: HDC; const R: TRect); virtual;

    function GetApplicationMenuGlyphSize: TSize; virtual;
    function GetCaptionFontSize(ACurrentFontSize: Integer): Integer; virtual;
    function GetMenuSeparatorSize: Integer; virtual;
    function GetPartColor(APart: Integer; AState: Integer = 0): TColor; virtual;
    function GetPartContentOffsets(APart: Integer): TRect; virtual;
    function GetSkinName: string; virtual;
    function GetQuickAccessToolbarLeftIndent(AHasApplicationButton: Boolean;
      AUseAeroGlass: Boolean): Integer; virtual;
    function GetQuickAccessToolbarMarkButtonOffset(AHasApplicationButton: Boolean;
      ABelow: Boolean): Integer; virtual;
    function GetQuickAccessToolbarOverrideWidth(AHasApplicationButton: Boolean;
      AUseAeroGlass: Boolean): Integer; virtual;
    function GetQuickAccessToolbarRightIndent(AHasApplicationButton: Boolean): Integer; virtual;
    function GetWindowBordersWidth(AHasStatusBar: Boolean): TRect; virtual;
    function HasGroupTransparency: Boolean; virtual;
    function NeedDrawGroupScrollArrow: Boolean; virtual;
    //
    procedure UpdateBitsPerPixel;
  end;

  TdxBlueRibbonSkin = class(TdxCustomRibbonSkin)
  protected
    function GetName: string; override;
    procedure LoadCustomRibbonSkinBitmap(out ABitmap: GpBitmap); override;
    procedure LoadFormSkinBitmap(out ABitmap: GpBitmap); override;
  public
    procedure DrawRibbonBottomBorder(DC: HDC; const R: TRect); override;
    function GetPartColor(APart: Integer; AState: Integer = 0): TColor; override;
  end;

  { TdxBlackRibbonSkin }

  TdxBlackRibbonSkin = class(TdxCustomRibbonSkin)
  protected
    function GetName: string; override;
    procedure LoadCustomRibbonSkinBitmap(out ABitmap: GpBitmap); override;
    procedure LoadFormSkinBitmap(out ABitmap: GpBitmap); override;
  public
    procedure DrawRibbonBottomBorder(DC: HDC; const R: TRect); override;
    function GetPartColor(APart: Integer; AState: Integer = 0): TColor; override;
  end;

  { TdxSilverRibbonSkin }

  TdxSilverRibbonSkin = class(TdxBlackRibbonSkin)
  protected
    function GetName: string; override;
    procedure LoadCustomRibbonSkinBitmap(out ABitmap: GpBitmap); override;
    procedure LoadFormSkinBitmap(out ABitmap: GpBitmap); override;
  public
    procedure DrawRibbonBottomBorder(DC: HDC; const R: TRect); override;
    function GetPartColor(APart: Integer; AState: Integer = 0): TColor; override;
  end;

function IsRectangularFormBottom(const AData: TdxRibbonFormData): Boolean; {$IFDEF DELPHI9} inline; {$ENDIF}

implementation

uses
{$IFDEF DELPHI6}
  Types,
{$ENDIF}
  cxGeometry, dxOffice11, Math, cxDWMApi;

{$R 'skins.res' 'skins.rc'}

const
  DropDownGalleryVerticalSizeGripBitmapSize: TSize = (cx: 18; cy: 7);

function IsRectangularFormBottom(const AData: TdxRibbonFormData): Boolean;
begin
  Result := (AData.Border in [bsDialog, bsSingle, bsToolWindow]) or (AData.Style = fsMDIChild);
end;

procedure ExcludeClipRect(DC: HDC; const R: TRect);
begin
  Windows.ExcludeClipRect(DC, R.Left, R.Top, R.Right, R.Bottom);
end;

procedure DrawFrame(DC: HDC; const R: TRect; AColor, ABorderColor: TColor;
  const ABorders: TcxBorders = cxBordersAll; ABorderWidth: Integer = 1);
var
  ABrush: HBRUSH;
  ABounds, ABorderBounds: TRect;
  ABorder: TcxBorder;

  function GetBorderBounds: TRect;
  begin
    Result := R;
    with Result do
      case ABorder of
        bLeft:
          begin
            Right := Left + ABorderWidth;
            Inc(ABounds.Left, ABorderWidth);
          end;
        bTop:
          begin
            Bottom := Top + ABorderWidth;
            Inc(ABounds.Top, ABorderWidth);
          end;
        bRight:
          begin
            Left := Right - ABorderWidth;
            Dec(ABounds.Right, ABorderWidth);
          end;
        bBottom:
          begin
            Top := Bottom - ABorderWidth;
            Dec(ABounds.Bottom, ABorderWidth);
          end;
      end;
  end;

begin
  if cxRectIsEmpty(R) then Exit;
  ABounds := R;
  if ABorders <> [] then
  begin
    ABrush := CreateSolidBrush(ColorToRGB(ABorderColor));
    for ABorder := Low(ABorder) to High(ABorder) do
      if ABorder in ABorders then
      begin
        ABorderBounds := GetBorderBounds;
        if not cxRectIsEmpty(ABorderBounds) then
          FillRect(DC, ABorderBounds, ABrush);
      end;
    DeleteObject(ABrush);
  end;
  if AColor <> clNone then
    FillRectByColor(DC, ABounds, AColor);
end;

procedure OutError;
begin
  raise Exception.Create('');
end;

{ TdxCustomRibbonSkin }

constructor TdxCustomRibbonSkin.Create;
begin
  inherited Create(GetName);
  LoadFormSkin;
  LoadRibbonSkin;
  UpdateBitsPerPixel;
end;

procedure TdxCustomRibbonSkin.LoadBitmapFromStream(const AResName: string;
  out ABitmap: GpBitmap);
var
  S: TStream;
begin
  S := TResourceStream.Create(HInstance, AResName, RT_RCDATA);
  try
    ABitmap := GetImageFromStream(S);
  finally
    S.Free;
  end;
end;

procedure TdxCustomRibbonSkin.LoadElementParts(ABitmap: GpBitmap;
  var AParts; const R: TRect; AID: Integer; const AFixedSize: TRect;
  const AImageIndexes: array of Byte; const APossibleStates: TdxByteSet = [];
  AIsTopDown: Boolean = True; AInterpolationMode: Integer = InterpolationModeDefault);
var
  I, J, AImageIndex: Integer;
  AOffsetSize: TSize;
  ALoadRect: TRect;
begin
  J := 0;
  if AIsTopDown then
  begin
    AOffsetSize.cx := 0;
    AOffsetSize.cy := cxRectHeight(R);
  end
  else
  begin
    AOffsetSize.cx := cxRectWidth(R);
    AOffsetSize.cy := 0;
  end;
  for I := Low(TStatesArray) to High(TStatesArray) do
  begin
    if (APossibleStates = []) or (I in APossibleStates) then
    begin
      if Length(AImageIndexes) = 0 then
        AImageIndex := J
      else
        if J < Length(AImageIndexes) then
          AImageIndex := AImageIndexes[J]
        else
          AImageIndex := 0;
      ALoadRect := cxRectOffset(R, AOffsetSize.cx * AImageIndex, AOffsetSize.cy * AImageIndex);
      Inc(J);
      if cxRectIsEqual(cxEmptyRect, AFixedSize) then
        TStatesArray(AParts)[I] := AddPart1x1(ABitmap, ALoadRect, AID, '', AInterpolationMode)
      else
        TStatesArray(AParts)[I] := AddPart3x3(ABitmap, ALoadRect, AFixedSize, AID, '', AInterpolationMode);
    end;
    Inc(AID);
  end;
end;

procedure TdxCustomRibbonSkin.LoadElementPartsFromFile(const AFileName: string;
  var AParts; AID: Integer; const AFixedSize: TRect;
  const AImageIndexes: array of Byte; const APossibleStates: TdxByteSet = []);
var
  ABitmap: GpGraphics;
  AImageRect: TRect;
begin
  if not CheckGdiPlus then Exit;
  GdipCheck(GdipLoadImageFromFile(PWideChar(WideString(AFileName)), ABitmap));
  AImageRect.Left := 0;
  AImageRect.Top := 0;
  GdipCheck(GdipGetImageWidth(ABitmap, AImageRect.Right));
  GdipCheck(GdipGetImageHeight(ABitmap, AImageRect.Bottom));
  LoadElementParts(ABitmap, AParts, AImageRect, AID, AFixedSize, AImageIndexes,
    APossibleStates);
  GdipDisposeImage(ABitmap);
end;

//  DRAWING

procedure TdxCustomRibbonSkin.DrawApplicationButton(DC: HDC; const R: TRect;
  AState: TdxApplicationButtonState);
begin
  if LowColors then

⌨️ 快捷键说明

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