我的目标是绘制一个Delphi
TDBgrid
单元格,使其具有从右到左的渐变颜色,如下图所示:
我使用了
GradientFillCanvas
装置中的 Vcl.GraphUtil
程序。
这是我的自定义
OnDrawColumnCell
事件处理程序:
procedure TMainForm.MyDBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
i : integer;
begin
if DM1.ABST_DV.RecNo mod 2=1 then
begin
GradientFillCanvas(MyDBGrid.Canvas,
clWhite,clGradientInactiveCaption,Rect, `gdHorizontal);
MyDBGrid.Canvas.Font.Color:=clBlack;
end else
begin
GradientFillCanvas(MyDBGrid.Canvas,
clWhite,clGradientInactiveCaption, Rect, gdHorizontal);
MyDBGrid.Canvas.Font.Color:=clBlack;
end;
end;
问题是,在
OnDrawColumnCell
事件中使用这段代码,TDBGrid
的内容不会出现。
内容没有出现,因为您没有绘制它。 您需要在绘制背景后绘制单元格的文本。 您可以使用
MyDBGrid.Canvas.TextRect()
方法来实现此目的。
TDBGrid
确实有一个 DefaultDrawDataCell()
方法,它绘制单元格及其文本,并且可以使用 OnDrawColumnCell
事件进行自定义,但它只支持绘制纯色背景,因此它将在您的自定义背景上绘制。 不过,您可以尝试使用透明的 Brush
来解决这个问题。