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;