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不会产生任何结果。
答案 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在绘制过程中进入的阶段以及如何自定义此过程。