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

📄 aclfpainter.pas

📁 I mComputermaster programmisDelphi+pascal
💻 PAS
📖 第 1 页 / 共 4 页
字号:
            if DefaultManager.ma[MaskScrollLeft].ImageCount = 0 then DefaultManager.ma[MaskScrollLeft].ImageCount := 3;            
            if DefaultManager.ma[MaskScrollLeft].Bmp = nil
              then TmpBmp.Width := math.max(GetSystemMetrics(SM_CXHSCROLL), WidthOf(DefaultManager.ma[MaskScrollLeft].R) div DefaultManager.ma[MaskScrollLeft].ImageCount)
              else TmpBmp.Width := math.max(GetSystemMetrics(SM_CXHSCROLL), DefaultManager.ma[DefaultManager.ConstData.MaskScrollLeft].Bmp.Width div 3);
          end;

          PaintItemFast(IndexScrollLeft, MaskScrollLeft, IndexBGScrollLeft, IndexBGHotScrollLeft,
            s_ScrollBtnLeft, CI, True, State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          FreeAndNil(BGBmp);
          PaintGlyph(DefaultManager.ConstData.MaskArrowLeft);
        end;
        sbpLineDown: begin
          BGBmp := CreateBmp24(WidthOf(R), HeightOf(R));
          PaintPage(sbpPageDown, BGBmp.Width, BGBmp.Height, BGBmp, True);
          CI := MakeCacheInfo(BGBmp);

          if DefaultManager.gd[IndexScrollRight].ReservedBoolean and (DefaultManager.ConstData.MaskScrollRight > -1)  then begin
            if DefaultManager.ma[MaskScrollRight].ImageCount = 0 then DefaultManager.ma[MaskScrollRight].ImageCount := 3;
            if DefaultManager.ma[MaskScrollRight].Bmp = nil
              then TmpBmp.Width := math.max(GetSystemMetrics(SM_CXHSCROLL), WidthOf(DefaultManager.ma[MaskScrollRight].R) div DefaultManager.ma[MaskScrollRight].ImageCount)
              else TmpBmp.Width := math.max(GetSystemMetrics(SM_CXHSCROLL), DefaultManager.ma[MaskScrollRight].Bmp.Width div 3);
          end;

          PaintItemFast(IndexScrollRight, MaskScrollRight, IndexBGScrollRight, IndexBGHotScrollRight,
            s_ScrollBtnRight, CI, True, State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          FreeAndNil(BGBmp);
          BitBlt(TmpBmp.Canvas.Handle, 0, 0, WidthOf(R), HeightOf(R), TmpBmp.Canvas.Handle, TmpBmp.Width - WidthOf(R), 0, SRCCOPY);
          TmpBmp.Width := WidthOf(R);
          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) + 60);
          PaintPage(sbpPageUp, BGBmp.Width, BGBmp.Height, BGBmp);
          CI := MakeCacheInfo(BGBmp);
          CI.Y := 30;
          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(sbpPageUp, BGBmp.Width, BGBmp.Height, BGBmp, True);
          CI := MakeCacheInfo(BGBmp);

          if DefaultManager.gd[IndexScrollTop].ReservedBoolean and (DefaultManager.ConstData.MaskScrollTop > -1)  then begin
            if DefaultManager.ma[DefaultManager.ConstData.MaskScrollTop].Bmp = nil
              then TmpBmp.Height := math.max(GetSystemMetrics(SM_CYVSCROLL), HeightOf(DefaultManager.ma[MaskScrollTop].R) div (1 + DefaultManager.ma[MaskScrollTop].MaskType))
              else TmpBmp.Height := math.max(GetSystemMetrics(SM_CYVSCROLL), DefaultManager.ma[MaskScrollTop].Bmp.Height div 2);
          end;

          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);
          FreeAndNil(BGBmp);
          PaintGlyph(DefaultManager.ConstData.MaskArrowTop);
        end;
        sbpLineDown: begin
          BGBmp := CreateBmp24(WidthOf(R), HeightOf(R));
          PaintPage(sbpPageDown, BGBmp.Width, BGBmp.Height, BGBmp, True);
          CI := MakeCacheInfo(BGBmp);

          if DefaultManager.gd[IndexScrollBottom].ReservedBoolean and (DefaultManager.ConstData.MaskScrollBottom > -1)  then begin
            if DefaultManager.ma[DefaultManager.ConstData.MaskScrollBottom].Bmp = nil
              then TmpBmp.Height := math.max(GetSystemMetrics(SM_CYVSCROLL), HeightOf(DefaultManager.ma[MaskScrollBottom].R) div (1 + DefaultManager.ma[MaskScrollBottom].MaskType))
              else TmpBmp.Height := math.max(GetSystemMetrics(SM_CYVSCROLL), DefaultManager.ma[MaskScrollBottom].Bmp.Height div 2);
          end;

          PaintItemFast(IndexScrollBottom, MaskScrollBottom, IndexBGScrollBottom, IndexBGHotScrollBottom,
            s_ScrollBtnBottom, CI, True, State, Rect(0, 0, TmpBmp.Width, TmpBmp.Height), Point(0, 0), TmpBmp, DefaultManager);
          FreeAndNil(BGBmp);
          BitBlt(TmpBmp.Canvas.Handle, 0, 0, WidthOf(R), HeightOf(R), TmpBmp.Canvas.Handle, 0, TmpBmp.Height - HeightOf(R), SRCCOPY);
          TmpBmp.Height := HeightOf(R);
          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, WidthOf(R), HeightOf(R), TmpBmp.Canvas.Handle, 0, 0, SRCCOPY);
//  BitBlt(ACanvas.Handle, R.Left, R.Top, TmpBmp.Width, TmpBmp.Height, TmpBmp.Canvas.Handle, 0, 0, SRCCOPY);
  FreeAndNil(TmpBmp);
end;

class procedure TcxACLookAndFeelPainter.DrawSizeGrip(ACanvas: TcxCanvas; const ARect: TRect; ABackgroundColor: TColor = clDefault);
begin
  if Skinned then FillDC(ACanvas.Handle, ARect, DefaultManager.GetGlobalColor) else inherited;
end;

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], MakeCacheInfo(TmpBmp));
    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;
  Bmp : TBitmap;
  CI : TCacheInfo; 
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
      Bmp := CreateBmp24(WidthOf(R), HeightOf(R));
      CI := MakeCacheInfo(Bmp);
      CI.FillColor := DefaultManager.GetGlobalColor;
      FillDC(Bmp.Canvas.Handle, Rect(0, 0, Bmp.Width, Bmp.Height), CI.FillColor);
      if State <> 2 then dec(R.Bottom);
      PaintItem(i, s, CI, True, State, R, Point(0, 0), ACanvas.Handle, DefaultManager);
      FreeAndNil(Bmp);
    end;
    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;
  Bmp : TBitmap;
  CI : TCacheInfo;
begin
  if Skinned then begin
    s := s_PageControl;
    CI.Ready := False;
    CI.FillColor := DefaultManager.GetGlobalColor;
//    ParentCenterColor := DefaultManager.GetGlobalColor;
//    CtrlParentColor := ParentCenterColor;
    if not AVertical then begin
      i := DefaultManager.GetSkinIndex(s);
      if DefaultManager.IsValidSkinIndex(i) then begin
        Bmp := CreateBmp24(WidthOf(R), 15);
        PaintItem(i, s, CI, False, 0, Rect(0, 0, Bmp.Width, Bmp.Height), Point(0, 0), Bmp, DefaultManager);
        BitBlt(ACanvas.Handle, R.Left, R.Top, Bmp.Width, 2, Bmp.Canvas.Handle, 0, 0, SRCCOPY);
        FreeAndNil(Bmp);
      end
      else FillDC(ACanvas.Handle, R, DefaultManager.GetGlobalColor);
    end
    else begin
      s := s + 'LEFT';
      i := DefaultManager.GetSkinIndex(s);
      if DefaultManager.IsValidSkinIndex(i) then begin
        PaintItem(i, s, CI, False, 0, R, Point(0, 0), ACanvas.Handle, DefaultManager);
      end
      else FillDC(ACanvas.Handle, R, DefaultManager.GetGlobalColor);
    end;
//    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 Inc(Result, 2);
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.SizeGripSize: TSize;
begin
  Result := Size(GetSystemMetrics(SM_CXVSCROLL),
                 GetSystemMetrics(SM_CYHSCROLL));
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 + -