4

以前我用它VirtualStringTree来显示所有节点,我用它Node.Index来检查事件中的奇数行和偶数行OnBeforeCellPaint

但是当我过滤节点时,我意识到Node.Index用作备用行是无关紧要的,如下面的屏幕截图所示:

过滤节点上的 VirtualStringTree 备用颜色

任何想法/解决方案来解决这个问题?

4

1 回答 1

-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 );

然后如果它是偶数,则将所有子节点绘制为与父节点相同。

于 2018-09-20T14:29:43.290 回答