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

📄 aclfpainter.pas

📁 I mComputermaster programmisDelphi+pascal
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit acLFPainter;
{$I sDefs.inc}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  sSkinManager, sStyleSimply, sMaskData, cxLookAndFeelPainters, cxGraphics, cxClasses;

type

  TcxACLookAndFeelPainter = class(TcxFlatLookAndFeelPainter)
  public
    // colors
    class function DefaultContentColor: TColor; override;
    class function DefaultContentEvenColor: TColor; override;
    class function DefaultContentOddColor: TColor; override;
    class function DefaultContentTextColor: TColor; override;
    class function DefaultFilterBoxColor: TColor; override;
    class function DefaultFilterBoxTextColor: TColor; override;
    class function DefaultFixedSeparatorColor: TColor; override;
    class function DefaultFooterColor: TColor; override;
    class function DefaultFooterTextColor: TColor; override;
    class function DefaultGridLineColor: TColor; override;
    class function DefaultGroupByBoxTextColor: TColor; override;
    class function DefaultGroupColor: TColor; override;
    class function DefaultGroupTextColor: TColor; override;
    class function DefaultHeaderColor: TColor; override;
    class function DefaultHeaderBackgroundColor: TColor; override;
    class function DefaultGroupByBoxColor: TColor; override;
    class function DefaultHeaderTextColor: TColor; override;
    class function DefaultHyperlinkTextColor: TColor; override;
    class function DefaultInactiveColor: TColor; override;
    class function DefaultInactiveTextColor: TColor; override;
    class function DefaultPreviewTextColor: TColor; override;
    class function DefaultRecordSeparatorColor: TColor; override;
    class function DefaultSizeGripAreaColor: TColor; override;

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

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

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

    class function DefaultChartDiagramValueBorderColor: TColor; override;
    class function DefaultChartDiagramValueCaptionTextColor: TColor; override;
    class function DefaultChartHistogramAxisColor: TColor; override;
    class function DefaultChartHistogramGridLineColor: TColor; override;
    class function DefaultChartHistogramPlotColor: TColor; override;
    class function DefaultChartPieDiagramSeriesSiteBorderColor: TColor; override;
    class function DefaultChartPieDiagramSeriesSiteCaptionColor: TColor; override;
    class function DefaultChartPieDiagramSeriesSiteCaptionTextColor: TColor; override;
    class function DefaultChartToolBoxDataLevelInfoBorderColor: TColor; override;
    class function DefaultChartToolBoxItemSeparatorColor: TColor; override;
    class procedure DrawBorder(ACanvas: TcxCanvas; R: TRect); override;
    class function BorderSize: Integer; override;
    // tabs
    class procedure DrawTab(ACanvas: TcxCanvas; R: TRect; ABorders: TcxBorders; const AText: string; AState: TcxButtonState;
      AVertical: Boolean; AFont: TFont; ATextColor, ABkColor: TColor; AShowPrefix: Boolean = False); override;
    class procedure DrawTabBorder(ACanvas: TcxCanvas; R: TRect; ABorder: TcxBorder; ABorders: TcxBorders; AVertical: Boolean); override;
    class procedure DrawTabsRoot(ACanvas: TcxCanvas; const R: TRect; ABorders: TcxBorders; AVertical: Boolean); override;
    class function IsDrawTabImplemented(AVertical: Boolean): Boolean; override;
    class function IsTabHotTrack(AVertical: Boolean): Boolean; override;
    class function TabBorderSize(AVertical: Boolean): Integer; override;
    // Scrollbar
    class procedure DrawScrollBarPart(ACanvas: TcxCanvas; AHorizontal: Boolean; R: TRect; APart: TcxScrollBarPart; AState: TcxButtonState); override;
    // buttons
    class function IsButtonHotTrack: Boolean; override;
    class function ButtonBorderSize(AState: TcxButtonState = cxbsNormal): Integer; override;
    class function ExpandButtonSize: Integer; override;
    class procedure DrawButton(ACanvas: TcxCanvas; R: TRect; const ACaption: string; AState: TcxButtonState; ADrawBorder: Boolean = True;
      AColor: TColor = clDefault; ATextColor: TColor = clDefault; AWordWrap: boolean = False); override;
     // size grip
    class function SizeGripSize: TSize; override;
    class procedure DrawSizeGrip(ACanvas: TcxCanvas; const ARect: TRect; ABackgroundColor: TColor = clDefault); override;
    // header
    class function HeaderBorderSize: Integer; override;
    class procedure DrawHeader(ACanvas: TcxCanvas; const ABounds, ATextAreaBounds: TRect;
      ANeighbors: TcxNeighbors; ABorders: TcxBorders; AState: TcxButtonState;
      AAlignmentHorz: TAlignment; AAlignmentVert: TcxAlignmentVert; AMultiLine, AShowEndEllipsis: Boolean;
      const AText: string; AFont: TFont; ATextColor, ABkColor: TColor;
      AOnDrawBackground: TcxDrawBackgroundEvent = nil; AIsLast: Boolean = False;
      AIsGroup: Boolean = False); override;
    class procedure DrawHeaderPressed(ACanvas: TcxCanvas; const ABounds: TRect); override;
    class function IsHeaderHotTrack: Boolean; override;
    class procedure DrawHeaderBorder(ACanvas: TcxCanvas; const R: TRect; ANeighbors: TcxNeighbors; ABorders: TcxBorders); override;
    class procedure DrawHeaderControlSection(ACanvas: TcxCanvas; const ABounds, ATextAreaBounds: TRect;
      ANeighbors: TcxNeighbors; ABorders: TcxBorders; AState: TcxButtonState;
      AAlignmentHorz: TAlignment; AAlignmentVert: TcxAlignmentVert; AMultiLine,
      AShowEndEllipsis: Boolean; const AText: string; AFont: TFont; ATextColor,
      ABkColor: TColor); override;
    class procedure DrawHeaderControlSectionBorder(ACanvas: TcxCanvas; const R: TRect;
      ABorders: TcxBorders; AState: TcxButtonState); override;
    class procedure DrawHeaderEx(ACanvas: TcxCanvas; const ABounds, ATextAreaBounds: TRect;
      ANeighbors: TcxNeighbors; ABorders: TcxBorders; AState: TcxButtonState;
      AAlignmentHorz: TAlignment; AAlignmentVert: TcxAlignmentVert; AMultiLine, AShowEndEllipsis: Boolean;
      const AText: string; AFont: TFont; ATextColor, ABkColor: TColor;
      AOnDrawBackground: TcxDrawBackgroundEvent = nil); override;
    class function HeaderBorders(ANeighbors: TcxNeighbors): TcxBorders; override;
    // filter
    class function FilterCloseButtonSize: TPoint; override;
    class function FilterDropDownButtonSize: TPoint; override;
    class function FilterActivateButtonSize: TPoint; override;
    class procedure DrawFilterDropDownButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState; AIsFilterActive: Boolean); override;
    class procedure DrawFilterCloseButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState); override;

    // checkbox
    class procedure DrawCheckButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState; AChecked: Boolean); overload; override;
    class procedure DrawCheckButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState; ACheckState: TcxCheckBoxState); overload; override;

    // RadioButton
    class procedure DrawRadioButton(ACanvas: TcxCanvas; X, Y: Integer; AButtonState: TcxButtonState; AChecked, AFocused: Boolean; ABrushColor: TColor;  AIsDesigning: Boolean = False); override;
    class function RadioButtonSize: TSize; override;

    // footer
    class procedure DrawFooterBorder(ACanvas: TcxCanvas; const R: TRect); override;
    class function FooterBorderSize: Integer; override;
    class procedure DrawFooterCellBorder(ACanvas: TcxCanvas; const R: TRect); override;
    // Glyphs
    class procedure DrawSortingMark(ACanvas: TcxCanvas; const R: TRect; AAscendingSorting: Boolean); override;
    //
    class procedure DrawMonthHeader(ACanvas: TcxCanvas; const ABounds: TRect;
      const AText: string; ANeighbors: TcxNeighbors; const AViewParams: TcxViewParams;
      AArrows: TcxHeaderArrows; ASideWidth: Integer; AOnDrawBackground: TcxDrawBackgroundEvent = nil); override;
  end;

procedure PaintConstBorder(Size: integer; MaskData: TsMaskData; R: TRect; Canvas : TcxCanvas);

implementation

uses sGraphUtils, sSkinProps, acntUtils, sConst, sAlphaGraph, math, sVCLUtils;

function Skinned : boolean; begin
  Result := (DefaultManager <> nil) and DefaultManager.SkinData.Active
end;

procedure PaintConstBorder(Size: integer; MaskData: TsMaskData; R: TRect; Canvas : TcxCanvas);
var
  w, h, dw, dh, x, y : integer;
  c : TColor;
begin
  with DefaultManager do begin
    if (WidthOf(R) < 4) or (HeightOf(R) < 4) or (MaskData.ImageCount = 0) then Exit;
    dw := WidthOf(MaskData.R) div MaskData.ImageCount;
    dh := HeightOf(MaskData.R) div (1 + MaskData.MaskType);
    w := dw div 3;
    h := dh div 3;
    c := DefaultManager.GetGlobalColor;
    StretchBlt(Canvas.Handle, R.Left, R.Top + Size, Size, R.Bottom - 2 * Size, MasterBitmap.Canvas.Handle,
               MaskData.R.Left, MaskData.R.Top + h, Size, h, SRCCOPY); // left - middle
    StretchBlt(Canvas.Handle, R.Left + Size, R.Top, R.Right - 2 * Size, Size, MasterBitmap.Canvas.Handle,
               MaskData.R.Left + w, MaskData.R.Top, w, Size, SRCCOPY); // top - middle
    StretchBlt(Canvas.Handle, R.Left + Size, R.Bottom - Size, R.Right - 2 * Size, Size, MasterBitmap.Canvas.Handle,
               MaskData.R.Left + w, MaskData.R.Top + dh - Size, w, Size, SRCCOPY); // bottom - middle
    StretchBlt(Canvas.Handle, R.Right - Size, R.Top + Size, Size, R.Bottom - 2 * Size, MasterBitmap.Canvas.Handle,
               MaskData.R.Left + dw - Size, MaskData.R.Top + h, Size, h, SRCCOPY); // right - middle
    BitBlt(Canvas.Handle, R.Left, R.Top, Size, Size, MasterBitmap.Canvas.Handle, MaskData.R.Left, MaskData.R.Top, SRCCOPY); // left - top
    BitBlt(Canvas.Handle, R.Left, R.Bottom - Size, Size, Size, MasterBitmap.Canvas.Handle, MaskData.R.Left, MaskData.R.Top + dh - Size, SRCCOPY); // left - bottom
    BitBlt(Canvas.Handle, R.Right - Size, R.Bottom - Size, Size, Size, MasterBitmap.Canvas.Handle, MaskData.R.Left + dw - Size, MaskData.R.Top + dh - Size, SRCCOPY); // right - bottom
    BitBlt(Canvas.Handle, R.Right - Size, R.Top, Size, Size, MasterBitmap.Canvas.Handle, MaskData.R.Left + dw - Size, MaskData.R.Top, SRCCOPY); // right - top
    for x := 0 to Size - 1 do for y := 0 to Size - 1 do begin
      if Canvas.Canvas.Pixels[R.Left + x, R.Top + y] = clFuchsia then Canvas.Canvas.Pixels[R.Left + x, R.Top + y] := c;
      if Canvas.Canvas.Pixels[R.Left + x, R.Bottom - Size + y] = clFuchsia then Canvas.Canvas.Pixels[R.Left + x, R.Bottom - Size + y] := c;
      if Canvas.Canvas.Pixels[R.Right - Size + x, R.Bottom - Size + y] = clFuchsia then Canvas.Canvas.Pixels[R.Right - Size + x, R.Bottom - Size + y] := c;
      if Canvas.Canvas.Pixels[R.Right - Size + x, R.Top + y] = clFuchsia then Canvas.Canvas.Pixels[R.Right - Size + x, R.Top + y] := c;
    end;
  end;
end;

{ TcxACLookAndFeelPainter }

class function TcxACLookAndFeelPainter.BorderSize: Integer;
begin
  if Skinned then Result := 2 else Result := inherited BorderSize;
end;

class function TcxACLookAndFeelPainter.ButtonBorderSize(AState: TcxButtonState): Integer;
begin
  if Skinned then Result := 4 else Result := inherited ButtonBorderSize(AState)
end;

class function TcxACLookAndFeelPainter.DefaultSizeGripAreaColor: TColor; 
begin
  if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultSizeGripAreaColor
end;

class function TcxACLookAndFeelPainter.DefaultVGridCategoryColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultVGridCategoryColor;
end;

class function TcxACLookAndFeelPainter.DefaultVGridCategoryTextColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultVGridCategoryTextColor;
end;

class function TcxACLookAndFeelPainter.DefaultVGridLineColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultVGridLineColor;
end;

class function TcxACLookAndFeelPainter.DefaultVGridBandLineColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultVGridBandLineColor;
end;

class function TcxACLookAndFeelPainter.DefaultContentColor: TColor;
begin
  if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultContentColor
end;

class function TcxACLookAndFeelPainter.DefaultContentEvenColor: TColor;
begin
  if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultContentEvenColor;
end;

class function TcxACLookAndFeelPainter.DefaultContentOddColor: TColor;
begin
  if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultContentOddColor;
end;

class function TcxACLookAndFeelPainter.DefaultContentTextColor: TColor;
var
  i : integer;
begin
  if Skinned then begin
    i := DefaultManager.GetSkinIndex(s_Edit);
    if DefaultManager.IsValidSkinIndex(i) then Result := DefaultManager.gd[i].FontColor[1] else Result := 0;
  end
  else Result := inherited DefaultContentTextColor
end;

class function TcxACLookAndFeelPainter.DefaultDateNavigatorHeaderColor: TColor;
begin
  Result := clYellow//!!!
end;

class function TcxACLookAndFeelPainter.DefaultDateNavigatorSelectionColor: TColor;
begin
  if Skinned then Result:=DefaultManager.GetHighLightColor
  else Result:=inherited DefaultDateNavigatorSelectionColor;
end;

class function TcxACLookAndFeelPainter.DefaultDateNavigatorSelectionTextColor: TColor;
begin
  if Skinned then Result:=DefaultManager.GetHighLightFontColor
  else Result:=inherited DefaultDateNavigatorSelectionTextColor;
end;

class function TcxACLookAndFeelPainter.DefaultSchedulerBackgroundColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultSchedulerBackgroundColor;
end;

class function TcxACLookAndFeelPainter.DefaultSchedulerTextColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultSchedulerTextColor;
end;

class function TcxACLookAndFeelPainter.DefaultSchedulerBorderColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultSchedulerBorderColor;
end;

class function TcxACLookAndFeelPainter.DefaultSchedulerControlColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultSchedulerControlColor;
end;

class function TcxACLookAndFeelPainter.DefaultSchedulerNavigatorColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultSchedulerNavigatorColor;
end;

class function TcxACLookAndFeelPainter.DefaultSchedulerViewContentColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultSchedulerViewContentColor;
end;

class function TcxACLookAndFeelPainter.DefaultSchedulerViewTextColor: TColor;
begin
  if Skinned then Result:=clRed
  else Result:=inherited DefaultSchedulerViewTextColor;
end;

class function TcxACLookAndFeelPainter.DefaultSelectionColor: TColor;
begin
  if Skinned then Result:=DefaultManager.GetHighLightColor

⌨️ 快捷键说明

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