以前我用它VirtualStringTree
来显示所有节点,我用它Node.Index
来检查事件中的奇数行和偶数行OnBeforeCellPaint
。
但是当我过滤节点时,我意识到Node.Index
用作备用行是无关紧要的,如下面的屏幕截图所示:
任何想法/解决方案来解决这个问题?
以前我用它VirtualStringTree
来显示所有节点,我用它Node.Index
来检查事件中的奇数行和偶数行OnBeforeCellPaint
。
但是当我过滤节点时,我意识到Node.Index
用作备用行是无关紧要的,如下面的屏幕截图所示:
任何想法/解决方案来解决这个问题?
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 );
然后如果它是偶数,则将所有子节点绘制为与父节点相同。