更改 TVirtualStringTree 中单元格的背景颜色
Change background color of cells in a TVirtualStringTree
I was seeing this code 并且,通过逻辑调整,它非常适合我在 BCB 6 中的应用程序,但我想知道如何更改单元格的背景颜色。当我使用 TListView 时,我使用 Canvas:
的画笔 属性
void __fastcall TForm1 :: ListView1CustomDrawItem (TCustomListView * Sender, TListItem * Item, TCustomDrawState State, bool & DefaultDraw)
{
Sender-> Canvas-> Brush-> Color = clWhite;
Sender-> Canvas-> Font-> Color = clBlack;
Sender-> Canvas-> Font-> Style = TFontStyles () >> fsBold;
}
但是我已经验证了Sender->Canvas->Brush->Color产生编译错误('TCustomControl: Canvas'无法访问)并且使用TargetCanvas->Brush- > 颜色不产生任何结果。
TVirtualStringTree 使用一组相当不同的程序来绘制树的单元格。如果查看帮助,您会发现每个单元格都会发生多个事件。您可能感兴趣的是:
OnBeforeCellPaint
OnPaintText
OnDrawText
OnBeforeCellPaint()
提供CellRect
参数,可用于填充整个背景,包括树展开符号和最终节点图像,或者,使用ContentRect
,不包括树展开符号 space,
procedure TForm1.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
然后用OnPaintText()
绘制文字
procedure TForm1.VSTPaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType);
或者,只有 OnDrawText()
可能更容易使用,您可以在其中填充文本背景(但不包括树展开符号和图像)并绘制文本
procedure TForm1.VSTDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
Node: PVirtualNode; Column: TColumnIndex; const Text: string;
const CellRect: TRect; var DefaultDraw: Boolean);
顺便说一句,我建议查看 dl 包中的帮助文件,以了解有关绘制树的更多详细信息。 Paint Cycles and Stages 一章的开头是:Virtual Treeview 中最复杂的过程无疑是它的绘画。在此处阅读 Virtual Treeview 在绘制过程中进入的阶段以及如何自定义此过程。
I was seeing this code 并且,通过逻辑调整,它非常适合我在 BCB 6 中的应用程序,但我想知道如何更改单元格的背景颜色。当我使用 TListView 时,我使用 Canvas:
void __fastcall TForm1 :: ListView1CustomDrawItem (TCustomListView * Sender, TListItem * Item, TCustomDrawState State, bool & DefaultDraw)
{
Sender-> Canvas-> Brush-> Color = clWhite;
Sender-> Canvas-> Font-> Color = clBlack;
Sender-> Canvas-> Font-> Style = TFontStyles () >> fsBold;
}
但是我已经验证了Sender->Canvas->Brush->Color产生编译错误('TCustomControl: Canvas'无法访问)并且使用TargetCanvas->Brush- > 颜色不产生任何结果。
TVirtualStringTree 使用一组相当不同的程序来绘制树的单元格。如果查看帮助,您会发现每个单元格都会发生多个事件。您可能感兴趣的是:
OnBeforeCellPaint
OnPaintText
OnDrawText
OnBeforeCellPaint()
提供CellRect
参数,可用于填充整个背景,包括树展开符号和最终节点图像,或者,使用ContentRect
,不包括树展开符号 space,
procedure TForm1.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
然后用OnPaintText()
绘制文字
procedure TForm1.VSTPaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType);
或者,只有 OnDrawText()
可能更容易使用,您可以在其中填充文本背景(但不包括树展开符号和图像)并绘制文本
procedure TForm1.VSTDrawText(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
Node: PVirtualNode; Column: TColumnIndex; const Text: string;
const CellRect: TRect; var DefaultDraw: Boolean);
顺便说一句,我建议查看 dl 包中的帮助文件,以了解有关绘制树的更多详细信息。 Paint Cycles and Stages 一章的开头是:Virtual Treeview 中最复杂的过程无疑是它的绘画。在此处阅读 Virtual Treeview 在绘制过程中进入的阶段以及如何自定义此过程。