如何在过滤的TVirtualStringTree上创建正确的备用行颜色

时间:2016-08-29 09:19:29

标签: delphi virtualtreeview tvirtualstringtree

之前我使用此VirtualStringTree来显示所有节点,并使用Node.Index检查OnBeforeCellPaint事件中的奇数行和偶数行。

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

VirtualStringTree alternate color on filtered nodes

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

1 个答案:

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

然后,如果其为偶数,则将所有子节点的油漆都与父节点相同。