我正在寻找一种quick方法,以根据过滤规则(特别是当过滤规则更改时)过滤VirtualStringTree中的节点。>。 VST中内置了一种过滤器机制,您可以在其中定义是否将节点过滤掉。 我的解决方案 问题 问题procedure TfrmMain.vstInitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
Data: PMyDataType;
begin
Data := Sender.GetNodeData(Node);
Data^ := GetData(Node.Index);
if IsNodeFiltered(Data^) then Include(InitialStates, ivsFiltered);
end;
procedure TfrmMain.OnFilterRuleChanged();
var
Node: PVirtualNode;
Data: PMyDataType;
begin
vst.BeginUpdate;
try
for Node in vst.InitializedNodes do
begin
Data := vst.GetNodeData(Node);
vst.IsFiltered[Node] := IsNodeFiltered(Data^);
end;
finally
vst.EndUpdate;
end;
end;
我正在寻找一种基于过滤规则来过滤VirtualStringTree中的节点的快速方法,尤其是当过滤规则更改时。 VST中内置了一个过滤器机制,您可以在其中定义...
vst.VisibleNodes
而不是InitializedNodes
,但是当节点展开时,还需要过滤。