# 画完成百分比的进度条

385人阅读 评论(1)

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;

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：9280次
• 积分：219
• 等级：
• 排名：千里之外
• 原创：10篇
• 转载：6篇
• 译文：0篇
• 评论：1条
文章存档
最新评论