画完成百分比的进度条

原创 2007年09月18日 12:44:00

procedure DrawProgressColorEH(Canvas: TCanvas;nProgress: Integer; const Rect: TRect; Column: TColumnEh);
var
  ldValue:integer;
  lsValue,lsTemp1,lsTemp2:string;
  lRect: TRect;
  X, Y,liTemp: Integer;
begin
  ldValue :=nProgress;
  with Canvas do //画 cell 的边框
  begin
    Pen.Color := $00ff0000; //定义画笔颜色(蓝色)
    MoveTo(Rect.Left, Rect.Top); //画笔定位
    LineTo(Rect.Right, Rect.Top); //画顶部蓝色的横线
    MoveTo(Rect.Left, Rect.Top); //画笔定位
    LineTo(Rect.Left, Rect.Bottom); //画左边绿色的竖线
    MoveTo(Rect.Left, Rect.Bottom); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画底部蓝色的横线
    MoveTo(Rect.Right, Rect.Top); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画右边绿色的竖线

    //画背景色
    Brush.Color:=clBtnFace;
    FillRect(Rect);

    //画百分比内容
    Brush.Color:=clNavy;
    lRect.Left :=Rect.Left ;
    lRect.Top := Rect.Top ;
    lRect.Bottom :=Rect.Bottom ;
    lRect.Right :=Rect.Left + Round((Rect.Right  - Rect.Left) * ldValue / 100);
    FillRect(lRect);

    //显示内容
    lsValue:=IntToStr(ldValue) + '%';
    X := (Rect.Left+Rect.Right) div 2 - TextWidth(lsValue) div 2;
    Y := (Rect.Bottom+Rect.Top) div 2 - TextHeight(lsValue) div 2;

    //如果有半个字在中间的,移动X解决半个字问题
    for liTemp:=1 to length(lsValue) do
    begin
      lsTemp1 :=MidBStr(lsValue,liTemp,1);
      lsTemp2 :=MidBStr(lsValue,1,liTemp - 1 );
      if (lRect.Right > (X + TextWidth(lsTemp2))) and (lRect.Right < (X + TextWidth(lsTemp2) + TextWidth(lsTemp1))) then
      begin
        if (lRect.Right > (X + TextWidth(lsTemp2) + TextWidth(lsTemp1) div 2)) then
          X := X - (X + TextWidth(lsTemp2) + TextWidth(lsTemp1) - lRect.Right)
        else
          X := X + ( lRect.Right - X - TextWidth(lsTemp2) );
      end;
    end;

    //单元格太小时的处理
    if X < lRect.Left then
       X:= lRect.Left;

    for liTemp:=1 to length(lsValue) do
    begin
      lsTemp1 :=MidBStr(lsValue,liTemp,1);     //需要显示的字符
      lsTemp2 :=MidBStr(lsValue,1,liTemp - 1 );     //
      if (lRect.Right > (x + TextWidth(lsTemp2) + TextWidth(lsTemp1) div 2)) then
      begin
        Brush.Color:=clNavy;
        Font.Color := clWhite;
      end
      else
      begin
        Brush.Color:=clBtnFace;
        Font.Color := clBlack;
      end;
      //字超过单元格时不显示
      if (x + TextWidth(lsTemp2) + TextWidth(lsTemp1)) < Rect.Right then
        Canvas.TextOut(X+ TextWidth(lsTemp2), Y, lsTemp1);
    end;
  end;
end; 

相关文章推荐

自定义圆形百分比进度条

  • 2015年09月21日 15:46
  • 1.65MB
  • 下载

自定义圆形进度条,金额百分比

  • 2016年06月28日 13:36
  • 2.11MB
  • 下载

js实现进度条(不带百分比)

js实现进度条(不带百分比)
  • ZJDWHD
  • ZJDWHD
  • 2016年12月12日 11:54
  • 480

Android百分比下载进度条

现在很多APP中都会集成下载功能,所以有一个方便好看又实用的进度条来展示下载进度很有必要,也能提高用户体验,在这里我就把项目里的下载进度条抽取出来分享给大家,话不多说,先看效果图: 这个进度...
  • ywl5320
  • ywl5320
  • 2015年03月31日 21:57
  • 3389

含有百分比的Web进度条

  • 2012年06月25日 15:33
  • 26KB
  • 下载

【Android自定义view系列】圆形百分比进度条

1.前言         在工作工程中,自己掌握的Android开发知识已经感觉到了瓶颈,Android初级知识没问题,写业务逻辑也没问题。但是作为一个Android开发工程师,并不能仅仅满足于现状...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:画完成百分比的进度条
举报原因:
原因补充:

(最多只允许输入30个字)