VirtualStringTree 隐藏节点

发布于 2024-09-04 23:21:39 字数 127 浏览 5 评论 0原文

是否可以隐藏 VirtualStringTree 中的特定节点? 我正在实现“过滤”功能(VST 充当带有列的列表),并且我希望避免每次更改过滤器时重新加载内容 - 相反,更快的方法是告诉 VST 不要渲染特定项目。 ..有什么解决办法吗?

is that possible to hide specific nodes in VirtualStringTree?
I'm implementing "filtering" feature (the VST acts as a list with columns), and I'd like to avoid reloading content each time the filter is changed - instead, much faster would be to tell VST not to render specific items ... any solutions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安人多梦 2024-09-11 23:21:39
VirtualTree.IsVisible[Node] := False;
VirtualTree.IsVisible[Node] := False;
因为看清所以看轻 2024-09-11 23:21:39

使用 .IsVisible[] 或 .IsFiltered[] 存在问题,而且速度非常慢,我在具有 25,000 个节点的树中探测过滤器,速度太慢。

我发现一种更快的方法可以解决使用 Include(Node.states,vsFiltered) 或 (Node.States,vsVisible) 时滚动条大小的问题,它包括根据以下内容手动更改 Node.TotalHeight 值可见节点的数量(未过滤)。

例如,我正在过滤 25,000 个节点,我使用的代码如下:

procedure TFC_Articulo.Filtrar(Filtro:String);
var
 Node:PVirtualNode;
 Data:PArticulo;
begin
  Node := TV.GetFirst;
  TV.RootNode.TotalHeight:=TV.DefaultNodeHeight;  // The Trick
  while Assigned(Node) do
  begin
    Data:=TV.GetNodeData(Node);
    Exclude(Node.States,vsFiltered);     // By default all nodes wil be Visible
    if ComparationHereForDetermineFiltering then
       Include(Node.States,vsFiltered)   // This node wil be filtered
    else
       Inc(TV.RootNode.TotalHeight,Node.NodeHeight);  // Determine the Height of scrollbar
    Node:=TV.GetNext(Node);
  end;
  TV.RootNode.TotalHeight:=TV.RootNode.TotalHeight+TV.BottomSpace;
  TV.UpdateScrollBars(True);
end;

希望这有帮助
抱歉英语不好...

There are problem using .IsVisible[] or .IsFiltered[] and it is that is very slow, i've probe filter in a tree with amoung of 25,000 nodes and is too slow.

I've found one aproach that is faster and solves the problem with scrollbar size when using Include(Node.states,vsFiltered) or (Node.States,vsVisible) is used, it consists on change manually the Node.TotalHeight value acording with the number of visible nodes (not Filtered).

For example i'm filtering 25,000 nodes and the code i was using is the follow :

procedure TFC_Articulo.Filtrar(Filtro:String);
var
 Node:PVirtualNode;
 Data:PArticulo;
begin
  Node := TV.GetFirst;
  TV.RootNode.TotalHeight:=TV.DefaultNodeHeight;  // The Trick
  while Assigned(Node) do
  begin
    Data:=TV.GetNodeData(Node);
    Exclude(Node.States,vsFiltered);     // By default all nodes wil be Visible
    if ComparationHereForDetermineFiltering then
       Include(Node.States,vsFiltered)   // This node wil be filtered
    else
       Inc(TV.RootNode.TotalHeight,Node.NodeHeight);  // Determine the Height of scrollbar
    Node:=TV.GetNext(Node);
  end;
  TV.RootNode.TotalHeight:=TV.RootNode.TotalHeight+TV.BottomSpace;
  TV.UpdateScrollBars(True);
end;

Hope this helps
Sorry bad english...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文