delphi dbgrid绘制单元格图像黑色背景

delphi dbgrid绘制单元格图像黑色背景,delphi,draw,dbgrid,Delphi,Draw,Dbgrid,使用TImage列表中的图像在DBGrid中的数据单元上绘制图示符时出现问题: 我在一个特定的数据单元中放置一个“选中标记”的bmp图像来代替文本“完成”。它可以工作,但在图像未覆盖的细胞部分,始终存在黑色。我曾尝试放大bmp图像的像素大小以匹配单元格大小,但它似乎总是为我调整图像大小。使用Delphi10.2,D7中是否存在问题 已经尝试了多种设置背景色、钢笔和画笔颜色等的组合。下面是一个简单的代码尝试示例: procedure TFUpRepWS.DBGrid1DrawColumnCell(

使用TImage列表中的图像在DBGrid中的数据单元上绘制图示符时出现问题:

我在一个特定的数据单元中放置一个“选中标记”的bmp图像来代替文本“完成”。它可以工作,但在图像未覆盖的细胞部分,始终存在黑色。我曾尝试放大bmp图像的像素大小以匹配单元格大小,但它似乎总是为我调整图像大小。使用Delphi10.2,D7中是否存在问题

已经尝试了多种设置背景色、钢笔和画笔颜色等的组合。下面是一个简单的代码尝试示例:

procedure TFUpRepWS.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with Column do begin
    if ((FieldName = 'Done') and (Field.AsString = 'x')) then begin
    //below shows black outside of check mark image in the cell
      ImageList1.Draw(DBGrid1.Canvas,Rect.Left,Rect.Top,0) 
    end
    else DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
end;

始终执行默认的单元绘制。这将确保细胞看起来像其他细胞。然后画图像。试试这个:

procedure TFUpRepWS.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with Column do
  begin
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    if ((FieldName = 'Done') and (Field.AsString = 'x')) then
      ImageList1.Draw(DBGrid1.Canvas, Rect.Left, Rect.Top, 0);
  end;
end;
我猜你所描述的发生是因为没有代码来绘制单元格背景