Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Color VirtualStringTree rows with hidden nodes

I'm currently using this code in the OnBeforeCellPaint event of my tree:

if Node.Index mod 2 = 0 then
begin
  TargetCanvas.Brush.Color := clBlack;
  TargetCanvas.FillRect(CellRect);
end
else
begin
  TargetCanvas.Brush.Color := clPurple;
  TargetCanvas.FillRect(CellRect);
end;

To color my nodes. But with hidden nodes this doesn't work as the index stays the same. Is there an visible index or an easy workaround?

Thanks in advance.

like image 587
humfred Avatar asked Mar 19 '23 04:03

humfred


1 Answers

There is no such method to get visibility node index at this time. But you can make your own where you will iterate through the visible nodes and count each iteration. Something like this (how you implement it in real code is upon you):

function GetVisibleIndex(Tree: TBaseVirtualTree; Node: PVirtualNode): Integer;
var
  P: PVirtualNode;
begin
  Assert(Assigned(Node), 'Node must not be nil!');
  Assert(Tree.IsVisible[Node], 'Node must be visible!');

  Result := 0;

  P := Tree.GetFirstVisible;
  while Assigned(P) and (P <> Node) do
  begin
    Inc(Result);
    P := Tree.GetNextVisible(P);
  end;
end;
like image 172
TLama Avatar answered Mar 29 '23 19:03

TLama