Конференция "KOL" » Добавление айтемов одного PTree в другой [Delphi, Windows]
 
  • Dimaxx © (19.02.10 17:44) [0]
    Сабж. Нужно сформировать дерево данных, некоторые данные сгруппированы в группы. Т.е. общий вид примерно такой:

    Root
    |_group1
    | |_data1.1
    | |_data1.2
    |_group2
    | |_data2.1
    |_data10
    |_data20


    Для удобства группы и просто данные заносятся в разные временные Tree, потом сортируются и добавляются к основному дереву (сначала группы, потом данные). Сделано для того, чтобы проще было одновременно сортировать данные и группы по независимым признакам. Создаем дерево и два вспомогательных дерева для групп и данных:

    Root:=NewTree(nil,'');
    G:=NewTree(nil,'');
    D:=NewTree(nil,'');



    Передаем поочередно эти вспомогательные деревья в функцию, которая и заполняет их данными (для исключения ошибки сделал простое добавление 8 групп и 2 данных). Сортировку и прочее пока не делал, ибо наткнулся на сабж. Цепляем полученные группы и данные к Root:

    if G.Count>0 then
    for C:=0 to G.Count-1 do Root.Add(G.Items[C]);
    if D.Count>0 then
    for C:=0 to D.Count-1 do Root.Add(D.Items[C]);
    G.Free;
    D.Free;



    Уже на 5-м добавлении получаем AV в Tree.Unlink. Если убрать обработку первого и сразу начать со второго, то на 2-м также получаем AV в Tree.Unlink. Самое интересное, что если отбросить эти вспомогательные деревья и передавать Root в функцию, то все работает и отлично заполняется. Т.е. конкретно не пашет копирование из одного Tree в другой.

    Может кто сталкивался с подобным? Как вариант можно обойтись вспомогательными не Tree, а List и добавлять оттуда в основное дерево. List и сортировать попроще...
  • Дмитрий К © (19.02.10 18:22) [1]
    downto
  • Dimaxx © (19.02.10 20:13) [2]
    Хм, действительно, обратный перебор вкупе с Insert вместо Add решил проблему. Спасибо!
 
Конференция "KOL" » Добавление айтемов одного PTree в другой [Delphi, Windows]
Есть новые Нет новых   [134431   +11][b:0][p:0.001]