之前我使用此VirtualStringTree
来显示所有节点,并使用Node.Index
检查OnBeforeCellPaint
事件中的奇数行和偶数行。
但是当我过滤节点时,我意识到Node.Index
与用作备用行无关,如下面的屏幕截图所示:
解决这个问题的任何想法/解决方案?
答案 0 :(得分:-1)
procedure TMainForm.IpTreeBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
begin
if Node.Index mod 2 = 0
then TargetCanvas.Brush.Color := $00F7E6D5
else TargetCanvas.Brush.Color := $00FBF2EA;
if Sender = ipTree then
if IpAddresses[ PVirtualNode( Node ).Index ].Highlighted then
TargetCanvas.Brush.Color := clYellow;
TargetCanvas.FillRect( CellRect );
end;
在这里,我的代码未考虑子节点。它为每一行交替显示颜色。但是,如果您确实有孩子,可以随时使用
iLevel := Sender.GetNodeLevel( Node );
然后,如果其为偶数,则将所有子节点的油漆都与父节点相同。