(RAD Studio) Virtual TreeView: как инициализировать все узлы одновременно? - PullRequest
2 голосов
/ 12 апреля 2010

Я только что обнаружил этот компонент и начал работать с ним.

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

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

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

Ответы [ 3 ]

6 голосов
/ 03 апреля 2011

Более правильный способ мгновенной инициализации одного узла - использовать метод ValidateNode вместо уже предложенного FullExpand. Согласно документации VT:

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

Метод TBaseVirtualTree.ValidateNode

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

3 голосов
/ 12 апреля 2010

treeview.FullExpand;

3 голосов
/ 12 апреля 2010

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

Пример:

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;
...