2010-04-12 2 views
2

Я только что открыл этот компонент и начал работать с ним.(RAD Studio) Virtual TreeView: как инициализировать все узлы сразу?

Я понимаю, что вся концепция заключается в том, чтобы инициализировать узлы на ходу, как они нужны, но мне нужно, чтобы все они инициализировались мгновенно.

Что такое умный способ сделать это?

Единственное, что я придумал, это использовать GetLast() после добавления узлов.
Я считаю, что есть лучший способ, или нет?

+0

Можете ли вы объяснить, почему вам нужно, чтобы все узлы были инициализированы мгновенно? В этом случае Virtual TreeView теряет большую часть своей скорости и «виртуальности». –

+0

Потому что это плохой дизайн, и у меня нет возможности изменить дизайн программного обеспечения и сделать его виртуальным :( – Andrew

+2

«Умный способ» - это ** не делать этого **. –

ответ

3

Вы можете написать собственную процедуру для создания дерева вручную.

Пример:

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

Более правильный способ инициализации одного узла мгновенно заключается в использовании метода ValidateNode вместо уже предложенного метода FullExpand. По documantation ТН:

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

TBaseVirtualTree.ValidateNode Метод

ValidateNode гарантирует, что данный узел (и все его дети, если Рекурсивный верно) инициализируются. Если Узел равен нулю, то используется скрытый корневой узел (что имеет смысл только в том случае, если Рекурсивное значение истинно, и в этом случае проверяются все дерево ).

+0

Это должен был быть принятый ответ, поскольку FullExpand будет меняться ** визуально ** расширять все дерево, которое вы может не хотеть, чтобы это произошло. –