Перекидывание узлов из одного TTreeView в другое
Причем, они должны быть почти одинаковы (т.е. в одном 2000 узлов, в другом те же 2000 плюс или минус несколько узлов). Узлы я гружу из базы, что занимает определенное время. Можно ли сделать так: загрузить один базовый TTreeView, а потом перекидывать его Items в другие деревья (не в цикле по AbsoluteIndex что тоже долго, а одним-двумя операторами). Пробовал метод Assign, получил ерунду.
если узлы содержат только текст, то можешь пользоваться ф-ями SaveToStream(), LoadFromStream().
Спасибо, вообще-то мне не хотелось бы совсем ничего грузить. Т.е. в идеале желательно один раз загрузить из базы данных объект типа TTreeNodes, а потом в нескольких TTreeView его отображать и редактировать. Такое возможно? У меня пока не получается.
Т.е. в идеале желательно один раз загрузить из базы данных объект типа TTreeNodes, а потом в нескольких TTreeView его отображать и редактировать. Такое возможно?
если имеешь в виду, чтоб несколько treeview имели одного и того же treenode, то
tv1.Items := tv.Items; //Delphi
но для передачи nodes служит SaveToStream()/LoadFromStream(). и работает очень быстро. где-то 40000 записей LoadFromStream(точнее LoadFromFile) загружает где-то за секунду.
можеш проверить с ф-иями SaveToFile()/LoadFromFile()
сперва нужно загрузить Nodes в первый treeview.
Записать это с SaveToFile("nodes.txt");
а остальные treeview уже заполнять с LoadFromFile.
если имеешь в виду, чтоб несколько treeview имели одного и того же treenode, то
tv1.Items := tv.Items; //Delphi
но для передачи nodes служит SaveToStream()/LoadFromStream(). и работает очень быстро. где-то 40000 записей LoadFromStream(точнее LoadFromFile) загружает где-то за секунду.
можеш проверить с ф-иями SaveToFile()/LoadFromFile()
сперва нужно загрузить Nodes в первый treeview.
Записать это с SaveToFile("nodes.txt");
а остальные treeview уже заполнять с LoadFromFile.
Еще раз спасибо, поэкспериментирую с Save/LoadToStream (правда нужно не только текст передавать, но и объекты, но т.к. объекты - целые числа, думаю, можно выйти из положения, например запихивая и извлекая их из текста).
А TreeView1->Items=TreeVie2->Items я пробовал и у меня ничего не получилось, поэтому и запостил вопрос.
тогда тебе нужно написать свой вариант Save*/Load*. я такое написал на Visul C. Нужно использовать стек treenode-ов.
А TreeView1->Items=TreeVie2->Items я пробовал и у меня ничего не получилось, поэтому и запостил вопрос.
я теперь смотрел, на Delphi она работает.
Еще раз спасибо, поэкспериментирую с Save/LoadToStream (правда нужно не только текст передавать, но и объекты, но т.к. объекты - целые числа, думаю, можно выйти из положения, например запихивая и извлекая их из текста).
А TreeView1->Items=TreeVie2->Items я пробовал и у меня ничего не получилось, поэтому и запостил вопрос.
Попробуй еще вот так,
TTreeNodes * nodes = new TTreeNodes(MainTree);
ChildTree->Items->Assign(nodes);