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

delphi dbgrid drawing cell image black background

使用 TImage 列表中的图像将字形绘制到 DBGrid 中的数据单元格时出现问题:

我正在用 "checkmark" 的 bmp 图像代替特定数据单元格中的文本 "Done"。它有效,但在图像未覆盖的单元格部分始终存在黑色。我试过放大 bmp 图像的像素大小以匹配单元格大小,但它似乎总是为我调整图像大小。使用 Delphi 10.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;

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

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;

我猜你描述的情况是因为没有绘制单元格背景的代码。