在DBGridEh中显示进度条

来源:互联网 发布:帝国cms仿站 编辑:程序博客网 时间:2024/05/22 07:56
procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
var
  ProgressRect, ATextRect: TRect;
  DBGridEh: TDBGridEh;
  DataSet: TDataSet;
  Percent: Integer;
  PercentText: string;
begin
  if not (Sender is TDBGridEh) then Exit;
 
  DBGridEh := Sender as TDBGridEh;
  DataSet := DBGridEh.DataSource.DataSet;
  with DBGridEh.Canvas do
  begin
    if Column.FieldName = 'percent' then
    begin
      with DataSet do
        Percent := Round(FieldByName(FCompleteFieldName).AsInteger
          / FieldByName(FTotalFieldName).AsInteger * 100);
 
      with Rect do
        ProgressRect := Types.Rect(Left+1, Top+1,
          Left + Round((Right- Left)*(Percent/100))-1, Bottom-1);//画出进度条

      Brush.Color := clWindow;
      Font.Color := clWindow;
      DBGridEh.DefaultDrawColumnCell(Rect, DataCol, Column, State);

      Brush.Color := $00FFCC00;//设置进度条颜色
      Font.Color  := $00FFCC00;
      DBGridEh.DefaultDrawColumnCell(ProgressRect, DataCol, Column, State);

      PercentText := IntToStr(Percent) + '%';
      Brush.Style := bsClear;
      Font.Color := clBlack;
      with Rect do
      TextOut(Left + (Right-Left) div 2 -TextWidth(PercentText) div 2,
        Top+1, PercentText);//画出进度数字
    end;
  end;
end;