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

📄 aclfpainter.pas

📁 Alpha Controls 界面控件包
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    end;
  end;
begin
  if IsRectEmpty(R) or ((APart = sbpThumbnail) and (AState = cxbsDisabled)) then Exit;
  if not Skinned then begin inherited DrawScrollBarPart(ACanvas, AHorizontal, R, APart, AState); Exit; end;
  case AState of cxbsHot : State := 1; cxbsPressed : State := 2; else State := 0 end;

  TmpBmp := CreateBmp24(WidthOf(R), HeightOf(R));

  with DefaultManager.ConstData do begin
    if DefaultManager.gd[IndexScrollRight].ReservedBoolean and not (APart in [sbpPageUp, sbpPageDown, sbpThumbnail]) then begin
      PaintItem(DefaultManager.GetSkinIndex(s_Button),
                  s_Button, EmptyCI, True,
                  State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
    end;
    if AHorizontal then begin
      case APart of
        sbpThumbnail : begin
          BGBmp := CreateBmp24(WidthOf(R), HeightOf(R));
          PaintPage(sbpPageUp, BGBmp.Width, BGBmp.Height, BGBmp);
          CI := MakeCacheInfo(BGBmp);
          PaintItemFast(IndexSliderHorz, MaskSliderHorz, ScrollSliderBGHorz, ScrollSliderBGHotHorz,
                        s_ScrollSliderH, CI, True,
                        State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          FreeAndNil(BGBmp);
          PaintGlyph(DefaultManager.ConstData.MaskSliderGlyphHorz);
        end;
        sbpLineUp: begin
          BGBmp := CreateBmp24(WidthOf(R), HeightOf(R));
          PaintPage(sbpPagedown, BGBmp.Width, BGBmp.Height, BGBmp);
          CI := MakeCacheInfo(BGBmp);
          if not DefaultManager.gd[IndexScrollLeft].ReservedBoolean then begin
            PaintItemFast(IndexScrollLeft, MaskScrollLeft, IndexBGScrollLeft, IndexBGHotScrollLeft,
                        s_ScrollBtnLeft, CI, True,
                        State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          end;
          FreeAndNil(BGBmp);
          PaintGlyph(DefaultManager.ConstData.MaskArrowLeft);
        end;
        sbpLineDown: begin
          BGBmp := CreateBmp24(WidthOf(R), HeightOf(R));
          PaintPage(sbpPageUp, BGBmp.Width, BGBmp.Height, BGBmp);
          CI := MakeCacheInfo(BGBmp);
          if not DefaultManager.gd[IndexScrollLeft].ReservedBoolean then begin
            PaintItemFast(IndexScrollRight, MaskScrollRight, IndexBGScrollRight, IndexBGHotScrollRight,
                        s_ScrollBtnRight, CI, True,
                        State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          end;
          FreeAndNil(BGBmp);
          PaintGlyph(DefaultManager.ConstData.MaskArrowRight);
        end;
        sbpPageUp, sbpPageDown: begin
          PaintPage(APart, TmpBmp.Width, TmpBmp.Height);
        end;
      end;
    end
    else begin
      case APart of
        sbpThumbnail : begin
          BGBmp := CreateBmp24(WidthOf(R), HeightOf(R));
          PaintPage(sbpPageUp, BGBmp.Width, BGBmp.Height, BGBmp);
          CI := MakeCacheInfo(BGBmp);
          PaintItemFast(IndexSliderVert, MaskSliderVert,
                        ScrollSliderBGVert, ScrollSliderBGHotVert,
                        s_ScrollSliderV, CI, True,
                        State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          FreeAndNil(BGBmp);
          PaintGlyph(DefaultManager.ConstData.MaskSliderGlyphVert);
        end;
        sbpLineUp: begin
          BGBmp := CreateBmp24(WidthOf(R), HeightOf(R));
          PaintPage(sbpPageDown, BGBmp.Width, BGBmp.Height, BGBmp);
          CI := MakeCacheInfo(BGBmp);
          if not DefaultManager.gd[IndexScrollLeft].ReservedBoolean then begin
            PaintItemFast(DefaultManager.ConstData.IndexScrollTop, DefaultManager.ConstData.MaskScrollTop, DefaultManager.ConstData.IndexBGScrollTop, IndexBGHotScrollTop,
                        s_ScrollBtnTop, CI, True,
                        State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          end;
          FreeAndNil(BGBmp);
          PaintGlyph(DefaultManager.ConstData.MaskArrowTop);
        end;
        sbpLineDown: begin
          BGBmp := CreateBmp24(WidthOf(R), HeightOf(R));
          PaintPage(sbpPageUp, BGBmp.Width, BGBmp.Height, BGBmp);
          CI := MakeCacheInfo(BGBmp);
          if not DefaultManager.gd[IndexScrollLeft].ReservedBoolean then begin
            PaintItemFast(IndexScrollBottom, MaskScrollBottom, IndexBGScrollBottom, IndexBGHotScrollBottom,
                        s_ScrollBtnBottom, CI, True,
                        State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          end;
          FreeAndNil(BGBmp);
          PaintGlyph(DefaultManager.ConstData.MaskArrowBottom);
        end;
        sbpPageUp, sbpPageDown: begin
          PaintPage(APart, TmpBmp.Width, TmpBmp.Height);
        end;
      end;
    end;
  end;
  BitBlt(ACanvas.Handle, R.Left, R.Top, TmpBmp.Width, TmpBmp.Height, TmpBmp.Canvas.Handle, 0, 0, SRCCOPY);
  FreeAndNil(TmpBmp);
end;

{$IFDEF DEVEX6}
class procedure TcxACLookAndFeelPainter.DrawSizeGrip(ACanvas: TcxCanvas; const ARect: TRect; ABackgroundColor: TColor);
begin
  if Skinned then begin
    FillDC(ACanvas.Handle, ARect, DefaultManager.GetGlobalColor)
  end
  else inherited;
end;
{$ENDIF}

class procedure TcxACLookAndFeelPainter.DrawSortingMark(ACanvas: TcxCanvas; const R: TRect; AAscendingSorting: Boolean);
var
  State : integer;
  TmpBmp : TBitmap;
  procedure PaintGlyph(MaskIndex : integer);
  var
    p : TPoint;
  begin
    if DefaultManager.IsValidImgIndex(MaskIndex) then with DefaultManager do begin
      if ma[MaskIndex].Bmp = nil then begin
        p.x := (WidthOf(R) - WidthOf(ma[MaskIndex].R) div ma[MaskIndex].ImageCount) div 2;
        p.y := (HeightOf(R) - HeightOf(ma[MaskIndex].R) div (1 + ma[MaskIndex].MaskType)) div 2;
      end
      else if (ma[MaskIndex].Bmp.Height div 2 < HeightOf(R)) then begin
        p.x := (WidthOf(R) - ma[MaskIndex].Bmp.Width div 3) div 2;
        p.y := (HeightOf(R) - ma[MaskIndex].Bmp.Height div 2) div 2;
      end;
      if (p.x < 0) or (p.y < 0) then Exit;
      DrawSkinGlyph(TmpBmp, p, State, 1, ma[MaskIndex]);
    end;
  end;
begin
  if not Skinned then begin inherited; Exit end;
  TmpBmp := CreateBmp24(WidthOf(R), HeightOf(R));
  BitBlt(TmpBmp.Canvas.Handle, 0, 0, TmpBmp.Width, TmpBmp.Height, ACanvas.Handle, R.Left, R.Top, SRCCOPY);
  if AAscendingSorting
    then PaintGlyph(DefaultManager.ConstData.MaskArrowBottom)
    else PaintGlyph(DefaultManager.ConstData.MaskArrowtop);
  BitBlt(ACanvas.Handle, R.Left, R.Top, TmpBmp.Width, TmpBmp.Height, TmpBmp.Canvas.Handle, 0, 0, SRCCOPY);
  FreeAndNil(TmpBmp)
end;

class procedure TcxACLookAndFeelPainter.DrawTab(ACanvas: TcxCanvas; R: TRect; ABorders: TcxBorders; const AText: string;
  AState: TcxButtonState; AVertical: Boolean; AFont: TFont; ATextColor, ABkColor: TColor; AShowPrefix: Boolean);
var
  i : integer;
  State : integer;
  s : string;
begin
  if Skinned then begin
    case AState of cxbsHot : State := 1; cxbsPressed : State := 2; else State := 0 end;
    ParentCenterColor := DefaultManager.GetGlobalColor;
    CtrlParentColor := ParentCenterColor;
    if AVertical then s := s_TabLeft else s := s_TabTop;

    i := DefaultManager.GetSkinIndex(s);
    if DefaultManager.IsValidSkinIndex(i) then begin
      PaintItem(i, s, EmptyCI, True, State, R, Point(0, 0), ACanvas.Handle, DefaultManager);
    end;
    if AVertical then i := DefaultManager.GetSkinIndex(s_PageControl) else i := DefaultManager.GetSkinIndex(s_PageControl + 'LEFT');
    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(AText), Length(AText), R, DT_EXPANDTABS + DT_VCENTER + DT_CENTER + DT_SINGLELINE);
    ParentCenterColor := clFuchsia;
    CtrlParentColor := clFuchsia;
  end
  else inherited;
end;

class procedure TcxACLookAndFeelPainter.DrawTabBorder(ACanvas: TcxCanvas; R: TRect; ABorder: TcxBorder; ABorders: TcxBorders; AVertical: Boolean);
begin
  if not Skinned then inherited;
end;

class procedure TcxACLookAndFeelPainter.DrawTabsRoot(ACanvas: TcxCanvas; const R: TRect; ABorders: TcxBorders; AVertical: Boolean);
var
  i : integer;
  s : string;
begin
  if Skinned then begin
    s := s_PageControl;
    if AVertical then s := s + 'LEFT';
    i := DefaultManager.GetSkinIndex(s);
    ParentCenterColor := DefaultManager.GetGlobalColor;
    CtrlParentColor := ParentCenterColor;
    if DefaultManager.IsValidSkinIndex(i) then begin
      PaintItem(i, s, EmptyCI, False, 0, R, Point(0, 0), ACanvas.Handle, DefaultManager);
    end
    else FillDC(ACanvas.Handle, R, DefaultManager.GetGlobalColor);
    ParentCenterColor := clFuchsia;
    CtrlParentColor := clFuchsia;
  end
  else inherited DrawTabsRoot(ACanvas, R, ABorders, AVertical);
end;

class function TcxACLookAndFeelPainter.ExpandButtonSize: Integer;
begin
  Result := inherited ExpandButtonSize;
  if Skinned then begin
    Inc(Result, 2);
  end
end;

class function TcxACLookAndFeelPainter.FilterActivateButtonSize: TPoint;
var
  i : integer;
begin
  if Skinned then begin
    i := DefaultManager.GetSkinIndex(s_GlobalInfo);
    i := DefaultManager.GetMaskIndex(i, s_GlobalInfo, s_SmallBoxChecked);
    if i < 0 then i := DefaultManager.GetMaskIndex(i, s_GlobalInfo, s_CheckBoxChecked);
    if DefaultManager.IsValidImgIndex(i) then begin
      Result.x := WidthOf(DefaultManager.ma[i].R) div DefaultManager.ma[i].ImageCount;
      Result.y := HeightOf(DefaultManager.ma[i].R) div (DefaultManager.ma[i].MaskType + 1);
    end
    else Result := inherited FilterCloseButtonSize;
  end
  else Result := inherited FilterCloseButtonSize;
end;

class function TcxACLookAndFeelPainter.FilterCloseButtonSize: TPoint;
var
  i : integer;
begin
  if Skinned then begin
    i := DefaultManager.GetSkinIndex(s_GlobalInfo);
    i := DefaultManager.GetMaskIndex(i, s_GlobalInfo, s_BorderIconClose);
    if DefaultManager.IsValidImgIndex(i) then begin
      Result.x := WidthOf(DefaultManager.ma[i].R) div DefaultManager.ma[i].ImageCount;
      Result.y := HeightOf(DefaultManager.ma[i].R) div (DefaultManager.ma[i].MaskType + 1);
    end
    else Result := inherited FilterCloseButtonSize;
  end
  else Result := inherited FilterCloseButtonSize;
end;

class function TcxACLookAndFeelPainter.FilterDropDownButtonSize: TPoint;
var
  i : integer;
begin
  if Skinned then begin
    i := DefaultManager.GetSkinIndex(s_ComboBox);
    i := DefaultManager.GetMaskIndex(i, s_ComboBox, s_ItemGlyph);
    if DefaultManager.IsValidImgIndex(i) then begin
      Result.x := WidthOf(DefaultManager.ma[i].R) div DefaultManager.ma[i].ImageCount;
      Result.y := HeightOf(DefaultManager.ma[i].R) div (DefaultManager.ma[i].MaskType + 1) + 1;
    end
    else Result := inherited FilterCloseButtonSize;
  end
  else Result := inherited FilterCloseButtonSize;
end;

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

class function TcxACLookAndFeelPainter.HeaderBorders(ANeighbors: TcxNeighbors): TcxBorders;
begin
  Result := cxBordersAll;
end;

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

class function TcxACLookAndFeelPainter.IsButtonHotTrack: Boolean;
begin
  if Skinned then Result := True else Result := inherited IsButtonHotTrack
end;

class function TcxACLookAndFeelPainter.IsDrawTabImplemented(AVertical: Boolean): Boolean;
begin
  if Skinned
    then Result := True
    else Result := inherited IsDrawTabImplemented(AVertical)
end;

class function TcxACLookAndFeelPainter.IsHeaderHotTrack: Boolean;
begin
  if Skinned then Result := False{True} else Result := inherited IsHeaderHotTrack
end;

class function TcxACLookAndFeelPainter.IsTabHotTrack(AVertical: Boolean): Boolean;
begin
  if Skinned then Result := True else Result := inherited IsTabHotTrack(AVertical)
end;

class function TcxACLookAndFeelPainter.TabBorderSize(AVertical: Boolean): Integer;
begin
  Result := inherited TabBorderSize(AVertical);
  if Skinned then inc(Result)
end;

end.

⌨️ 快捷键说明

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