我想格式化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}中对一些绘图参数(字体颜色,笔刷颜色)进行小型配置}}
答案 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;