2010-04-12 18 views
2

Je viens de découvrir ce composant et j'ai commencé à travailler dessus. Je comprends que tout le concept consiste à initialiser les noeuds à la volée comme ils sont nécessaires mais j'ai besoin de tous pour s'initialiser instantanément.(RAD Studio) Virtual TreeView: comment initialiser tous les nœuds à la fois?

Quelle est la façon intelligente de le faire?

La seule chose que j'ai imaginé est d'utiliser GetLast() après avoir ajouté des nœuds.
Je crois, il y a un meilleur moyen, ou pas?

+0

Pouvez-vous expliquer «pourquoi» vous avez besoin que tous les nœuds soient initialisés instantanément? Dans ce cas, le Virtual TreeView perd une grande partie de sa vitesse et de sa "virtualité". –

+0

Parce que c'est un mauvais design et je n'ai pas une option pour changer la conception du logiciel et le rendre virtuel :( – Andrew

+2

La "façon intelligente" est de ** ne pas faire cela. ** –

Répondre

3

treeview.FullExpand;

3

Vous pouvez écrire votre propre procédure pour créer treeview manuellement.

Exemple:

procedure TForm1.BuildTree; 
var 
    i: integer; 
    Data: ^TYourRecord; 
    pNode, cNode: PVirtualNode; 
begin 
    for i:=0 to 1000 - 1 do 
    begin 
    //build parent node 
    pNode := VT.AddChild(nil); 
    Data := VT.GetNodeData(pNode); 
    //fill record values 
    Data.SomeVar := 'Parent Node'; 
    //build child node 
    cNode := VT.AddChild(pNode); 
    Data := VT.GetNodeData(cNode); 
    Data.SomeVar := 'Child Node'; 
    end; 
end; 
5

La méthode la plus correcte pour initialiser instantanément un seul noeud consiste à utiliser la méthode ValidateNode, au lieu de FullExpand déjà suggéré. Selon le documantation VT:

procedure ValidateNode(Node: PVirtualNode; Recursive: Boolean); 

TBaseVirtualTree.ValidateNode Méthode

ValidateNode assure que le noeud donné (et tous ses enfants, si récursive est vrai) sont initialisés. Si Node est nul, le nœud racine caché est utilisé (ce qui n'a de sens que si récursif est vrai, auquel cas l'arbre est validé).

+0

Cela aurait dû être la réponse acceptée, puisque FullExpand va changer ** visuellement ** développer l'arbre entier que vous pourrait ne pas vouloir que cela arrive. –