使用 Delphi 2010,我有一个 5 列的 TStringGrid
ID、开始、结束、持续时间和用于在每个单元格中绘制进度条的列。
第 5 列的宽度(例如:60)由选项对话框中的条形宽度旋转编辑字段设置。
鉴于持续时间是(结束 - 开始)* 1440(例如:0.39 分钟),我需要将进度条绘制为总条宽度的百分比。(即 39/60 = 65%)因此,应在整个单元格上涂上 65%。它还需要显示居中的百分比。(海军蓝条和白色文字)。
谁能帮我画这个进度条?
procedure Tphasedata.grdMainDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
LStrCell: string;
LRect: TRect;
begin
with (Sender as TStringGrid) do
begin
// Don't change color for first Column, first row
if (ACol = 0) or (ARow = 0) then
Canvas.Brush.Color := clBtnFace
else
begin
case ACol of
0: Canvas.Font.Color := clBlack;
1: Canvas.Font.Color := clBlue;
2: Canvas.Font.Color := clBlue;
3: Canvas.Font.Color := clRed;
end;
// Draw the Band
if ARow mod 2 = 0 then
Canvas.Brush.Color := $00E1FFF9
else
Canvas.Brush.Color := $00FFEBDF;
Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]);
Canvas.FrameRect(Rect);
//center the duration text
if ACol = 3 then
begin
LStrCell := Cells[ACol, ARow]; // grab cell text
Canvas.FillRect(Rect); // clear the cell
LRect := Rect;
LRect.Top := LRect.Top + 3; // adjust top to center vertical
// draw text
DrawText(Canvas.Handle, PChar(LStrCell), Length(LStrCell), LRect, DT_CENTER);
end;
i ACol = 4 then
begin
// draw progress bar here
end;
end;
end;