Hmm..
oder man nutzt die möglichkeiten des TreeNodes:
Delphi-Quellcode:
for k := 0 to length(varStringArray)-1 do
begin
// Leere Tags ignorieren
if varStringArray[k] = '' then Continue;
// erstes Node holen
varTreeNodeItem := TreeView.TopItem;
// Vergleichen, ob Tag vorhanden
while Assigned(varTreeNodeItem) do begin
if varTreeNodeItem.Text = varStringArray[k] then begin
// Objekt zu bereits existierendem Tag hinzufügen
TreeView.Items.AddChild(varTreeNodeItem, FObjects[i].ItemCaption);
Break;
end;
// Nächstes Node der 'gleich' Ebene
varTreeNodeItem := TreeView.TopItem.getNextSibling;
end;
// Wenn kein existierender Zweig gefunden, dannn anhängen
if not Assigned(tmpTreeNode) then begin
varTreeNodeItem := TreeView.Items.Add(nil, varStringArray[k]);
TreeView.Items.AddChild(varTreeNodeItem, FObjects[i].ItemCaption);
end;
end;
Damit wird nur noch durch die HauptNodes durchgegangen, ohne alle Unternodes zu Prüfen!
Vor allem wird nun wirklich nur nach den Tags gesucht, da beim Durchgehen der ganzen Liste auch TreeNode.Text von den untergeordneten FObjects[i].ItemCaption mit verglichen wird und somit bei einem ItemCaption = Tag dort ein Unter-Node eingefügt wird...