4

我目前在我的树的 OnBeforeCellPaint 事件中使用此代码:

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;

为我的节点着色。但是对于隐藏节点,这不起作用,因为索引保持不变。是否有可见的索引或简单的解决方法?

提前致谢。

4

1 回答 1

7

目前没有这样的方法来获取可见性节点索引。但是您可以创建自己的节点,在其中迭代可见节点并计算每次迭代。像这样的东西(你如何在实际代码中实现它取决于你):

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;
于 2014-10-17T16:23:24.347 回答