更改TVirtualStringTree中单元格的背景颜色

时间:2019-10-04 11:06:11

标签: canvas c++builder c++builder-6 tvirtualstringtree

https://www.twilio.com/docs/sms/quickstart/node,并且通过逻辑上的调整,它非常适合我在BCB 6中的应用,但是我想知道如何更改单元格的背景色。当我使用TListView进行操作时,我使用了Canvas的Brush属性:

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-> Color不会产生任何结果。

1 个答案:

答案 0 :(得分:1)

TVirtualStringTree使用一组相当不同的过程来绘制树的单元格。如果您查看帮助,您会发现每个单元都发生了多个事件。您可能感兴趣的是:

OnBeforeCellPaint
OnPaintText
OnDrawText

OnBeforeCellPaint()提供了CellRect参数,您可以使用它填充整个背景,包括树扩展符号和最终的节点图像,或者使用ContentRect,不包括树扩展符号空间,

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软件包中的帮助文件,以获取有关绘制树的更多详细信息。 绘画循环和阶段一章以此开头:虚拟树视图中最复杂的过程无疑是其绘画。在此处阅读Virtual Treeview在绘制过程中进入的阶段以及如何自定义此过程。