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

📄 aclfpainter.pas

📁 Alpha Controls.v5.46b Source
💻 PAS
📖 第 1 页 / 共 3 页
字号:
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 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 DefaultGroupByBoxTextColor: TColor; override;
    class function DefaultSchedulerTextColor: TColor; override;
    class function DefaultTimeGridMajorScaleTextColor: TColor; override;
    class function DefaultTabsBackgroundColor: TColor; override;

    class function DefaultSizeGripAreaColor: TColor; override;
    class function DefaultContentColor: TColor; override;
    class function DefaultInactiveColor: TColor; override;
    class function DefaultInactiveTextColor: TColor; override;
    class function DefaultContentTextColor: TColor; override;
    class procedure DrawBorder(ACanvas: TcxCanvas; R: TRect); override;
    class function BorderSize: Integer; override;
    class function DefaultDateNavigatorHeaderColor: TColor; 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 DefaultFilterBoxColor: TColor; override;
    class function DefaultFilterBoxTextColor: TColor; override;
    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;
    // footer
    class procedure DrawFooterBorder(ACanvas: TcxCanvas; const R: TRect); override;
    class function FooterBorderSize: Integer; override;
    class procedure DrawFooterCellBorder(ACanvas: TcxCanvas; const R: TRect); override;
    class function DefaultFooterColor: TColor; override;
    class function DefaultFooterTextColor: TColor; override;
    class function DefaultTabColor: TColor; 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.DefaultContentColor: TColor;
begin
  if Skinned then Result := DefaultManager.GetActiveEditColor else Result := inherited DefaultContentColor
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.DefaultFilterBoxColor: TColor;
begin
  if Skinned then Result := DefaultManager.GetGlobalColor else Result := inherited DefaultFilterBoxColor
end;

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

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

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

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

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

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

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

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

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

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

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

class function TcxACLookAndFeelPainter.DefaultSchedulerTextColor: TColor;
begin
  Result := clRed//!!!
end;

class function TcxACLookAndFeelPainter.DefaultTabColor: TColor;
begin
  if DefaultManager <> nil then Result := DefaultManager.GetGlobalColor else Result := inherited DefaultTabColor
end;

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

class function TcxACLookAndFeelPainter.DefaultTimeGridMajorScaleTextColor: TColor;
begin
  Result := clRed//!!!
end;

class procedure TcxACLookAndFeelPainter.DrawBorder(ACanvas: TcxCanvas; R: TRect);
var
  i, m : integer;
begin
  if Skinned then begin
    i := DefaultManager.GetSkinIndex(s_Edit);
    m := DefaultManager.GetMaskIndex(i, s_Edit, s_BordersMask);
    if DefaultManager.IsValidImgIndex(m) then begin
      PaintConstBorder(2, DefaultManager.ma[m], R, ACanvas);
    end;
  end
  else inherited DrawBorder(ACanvas, R)
end;

Class procedure TcxACLookAndFeelPainter.DrawButton(ACanvas: TcxCanvas; R: TRect; const ACaption: string;
  AState: TcxButtonState; ADrawBorder: Boolean = True; AColor: TColor = clDefault;
  ATextColor: TColor = clDefault; AWordWrap: boolean = False);
var
  i : integer;
  TmpBmp : TBitmap;
  State : integer;
  CI : TCacheInfo;
begin
  if Skinned then begin
    i := DefaultManager.GetSkinIndex(s_Button);
    if DefaultManager.IsValidSkinIndex(i) then begin
      case AState of cxbsHot : State := 1; cxbsPressed : State := 2; else State := 0 end;
      TmpBmp := CreateBmp24(WidthOf(R), HeightOf(R));
      FillDC(TmpBmp.Canvas.Handle, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), DefaultManager.GetGlobalColor);
      CI := MakeCacheInfo(TmpBmp);
      PaintItem(i, s_Button, CI, True, State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
//      PaintSmallItem(i, s_Button, CI, True, State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);

      BitBlt(ACanvas.Handle, R.Left, R.Top, TmpBmp.Width, TmpBmp.Height, TmpBmp.Canvas.Handle, 0, 0, SRCCOPY);

      if State = 0
        then ACanvas.Font.Color := DefaultManager.gd[i].FontColor[1]
        else ACanvas.Font.Color := DefaultManager.gd[i].HotFontColor[1];
      ACanvas.Brush.Style := bsClear;
      DrawText(ACanvas.Handle, PAnsiChar(ACaption), Length(ACaption), R, DT_EXPANDTABS + DT_VCENTER + DT_CENTER + DT_SINGLELINE);
      FreeAndNil(TmpBmp);
    end;
  end else inherited DrawButton(ACanvas, R, ACaption, AState, ADrawBorder, AColor, ATextColor)
end;

class procedure TcxACLookAndFeelPainter.DrawCheckButton(ACanvas: TcxCanvas; R: TRect; AState: TcxButtonState; ACheckState: TcxCheckBoxState);  
var
  State, i, w, h, {x, y,} NewLeft, NewTop : integer;
  TmpBmp : TBitmap;
begin
  if Skinned then begin
    case ACheckState of
      cbsUnchecked : DefaultManager.GetMaskIndex(DefaultManager.ConstData.IndexGLobalInfo, s_GLobalInfo, s_SmallBoxUnChecked);
      cbsChecked : i := DefaultManager.GetMaskIndex(DefaultManager.ConstData.IndexGLobalInfo, s_GLobalInfo, s_SmallBoxChecked);
      cbsGrayed : i := DefaultManager.GetMaskIndex(DefaultManager.ConstData.IndexGLobalInfo, s_GLobalInfo, s_SmallBoxGrayed);
    end;
    if DefaultManager.IsValidImgIndex(i) then begin
      TmpBmp := CreateBmp24(WidthOf(R), HeightOf(R));

      FillDC(TmpBmp.Canvas.Handle, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), DefaultManager.GetGlobalColor);

⌨️ 快捷键说明

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