2012-03-05 13 views
8

sto usando Lista albero virtuale per Delphi 2009. Ho creato un albero con dati quali:l'iterazione di nodi e le sue bambino e modificare i dati

type 
    PTreeData = ^TTreeData; 
    TTreeData = record 
    FCaption: String; 
    FPath: String; 
    end; 

voglio iterare su tutti gli elementi, ma in ordine specifico. Devo acquisire il primo nodo di primo livello, quindi eseguire un'iterazione su tutti i suoi figli e modificare il campo FPath. Quando ho finito con i suoi figli voglio ottenere un altro nodo di primo livello, e così via.

Prima di tutto non so come eseguire l'iterazione sui nodi di livello superiore.

Grazie in anticipo per eventuali suggerimenti su questo

+2

Non appropriato per questa particolare domanda, ma vedere anche il metodo 'IterateSubtree'. –

risposta

11

Ecco come iterare i nodi di livello superiore. Nota che (come Smasher ha lasciato nel suo commento) che i nodi sono stati inizializzati se necessario usando GetFirst e GetNextSibling cosa potrebbe rallentare un po 'l'iterazione. Tuttavia, è possibile utilizzare le funzioni GetFirstNoInit e GetNextNoInit (se i nodi sono già inizializzati) e si potrebbero ottenere prestazioni migliori.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Data: PTreeData; 
    Node: PVirtualNode; 
begin 
    Node := VirtualStringTree1.GetFirst; 
    while Assigned(Node) do 
    begin 
    Data := VirtualStringTree1.GetNodeData(Node); 
    // here you can access your data 
    Node := VirtualStringTree1.GetNextSibling(Node); 
    end; 
end; 
+2

Funziona quasi :) Invece GetNext Devo usare GetNextSibling per iterare solo sui nodi di primo livello. Plz correggilo così potrei accettare la tua risposta. E grazie! :) –

+6

Ma Jacek, la tua domanda dice esplicitamente che è necessario iterare su tutti i nodi di livello superiore * e i loro figli *. –