为什么DevExpress TCxGrid AViewInfo.EditViewInfo.Paint(ACanvas);忽略指定的字体颜色?

时间:2017-04-26 14:18:05

标签: delphi devexpress

我想格式化DevExpress TcxGrid (DBTableView),使所选的特殊单元格包含蓝色文本,顶部边框为红色。我已经得到了以下代码:

procedure TTestFrame.ClipsGridCClipsViewCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var TmpBounds: TRect;
begin
  if IsSpecialCell(...) then begin
    ACanvas.Font.Color:=clBlue;
    AViewInfo.EditViewInfo.Paint(ACanvas);
    TmpBounds:=AViewInfo.Bounds;
    TmpBounds.Bottom:=TmpBounds.Top+2;
    ACanvas.FillRect(TmpBounds, clRed);
    ADone:=True;    
  end;
end;

不幸的是,此代码忽略了蓝色字体颜色,并以默认格式绘制单元格,仅添加红色顶部边框。我想如果AViewInfo.EditViewInfo.Paint(ACanvas);已考虑到指定的颜色,我的问题就会解决。不幸的是,此过程使用默认格式。

那么 - 如何解决我的问题?并且,通常,是否可以在OnCustomDraw中绘制一些内容(例如,使用FillRec的单元格的内边界)并在默认绘图过程中绘制一些其他内容(例如,单元格的常用内容)?目前在我看来,我必须做出选择 - 是否在OnCustomDrawCell中绘制所有内容或让Grid绘制所有内容,我只能在{{1}中对一些绘图参数(字体颜色,笔刷颜色)进行小型配置}}

1 个答案:

答案 0 :(得分:0)

访问私人功能

TcxPainterAccess = class(TcxGridTableDataCellPainter);

procedure TTestFrame.ClipsGridCClipsViewCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var APainter  : TcxPainterAccess ;
begin
  APainter := TcxPainterAccess(TcxViewInfoAcess(AViewInfo).GetPainterClass.Create(ACanvas, AViewInfo));
try
  with Apainter do          
     DrawContent;
     DrawBorders;
     your code....
  finally
     Adone := True;
     Free;
  end;
end;