Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [C++Builder 2009] TTreeView (http://forum.oszone.net/showthread.php?t=137995)

crashtuak 17-04-2009 19:11 1096973

[C++Builder 2009] TTreeView
 
Вот есть ини файл:
Код:

[Options]
CategoryCount=5
ItemsCount=6

[Category]
1=System
2=Video
3=Internet
4=Games
5=Drivers

[Item_1]
name="Item 1"
category=3

[Item_2]
name="Item 2"
category=3

[Item_3]
name="Item 3"
category=4

[Item_4]
name="Item 4"
category=2

[Item_5]
name="Item 5"
category=5

[Item_6]
name="Item 6"
category=1

Потом вот код построения с ини файла дерева:
Код:

void __fastcall TForm1::Button4Click(TObject *Sender)
{
int CategoryCount = StrToInt(category->ReadString("Options",  "CategoryCount", NULL));
int ItemCount = StrToInt(category->ReadString("Options",  "ItemsCount", NULL));
for(int cat = 1; cat <= CategoryCount; cat++) {
TreeView1->Items->Add(NULL,category->ReadString("Category",  IntToStr(cat), NULL));
  for(int item = 1; item <= ItemCount; item++) {
                if(category->ReadString("Item_"+IntToStr(item),  "category", NULL) == IntToStr(cat))
                {
                  TreeView1->Items->Add(TreeView1->Items->Item[cat-1],category->ReadString("Item_"+IntToStr(item),  "name", NULL));
                }
  }
}
}

Но при таком коде все сабитемы добавляются не как саб итемы а как хрен знает что :):

А надо так:

Alan85 17-04-2009 21:08 1097071

Цитата:

Цитата crashtuak
TreeView1->Items->Add(TreeView1->Items->Item[cat-1],category->ReadString("Item_"+IntToStr(item), "name", NULL)); »

замени на
Код:

TreeView1->Items->AddChild(TreeView1->Items->Item[cat-1],category->ReadString("Item_"+IntToStr(item), "name", NULL));
и будет все ок

crashtuak 20-04-2009 20:39 1099302

Цитата:

Цитата Alan85
замени на
Код:
TreeView1->Items->AddChild(TreeView1->Items->Item[cat-1],category->ReadString("Item_"+IntToStr(item), "name", NULL));
и будет все ок »

Заменил и вот смотрите прикрепленный рисунок.
Вопрос не снят.

Alan85 20-04-2009 22:24 1099409

Извини не все учел в цикле (не проверил). Вот как вышло:
Код:

TTreeNode *tn; // тут добавил указатель
int CategoryCount = StrToInt(category->ReadString("Options",  "CategoryCount", NULL));
int ItemCount = StrToInt(category->ReadString("Options",  "ItemsCount", NULL));
for(int cat = 1; cat <= CategoryCount; cat++) {
tn=TreeView1->Items->Add(NULL,category->ReadString("Category",  IntToStr(cat), NULL)); // тут сохранил в нем адрес текущей ветки
  for(int item = 1; item <= ItemCount; item++) {
                if(category->ReadString("Item_"+IntToStr(item),  "category", NULL) == IntToStr(cat))
                {
                  TreeView1->Items->AddChild(tn,category->ReadString("Item_"+IntToStr(item), "name", NULL)); // ну а тут добавил в текущую ветку все что надо
                }
  }
}


crashtuak 21-04-2009 07:10 1099636

Alan85, Спасибо, но я вот додумался вот к этому:
Код:

int iii=0;
int CategoryCount = StrToInt(category->ReadString("Options",  "CategoryCount", NULL));
int ItemCount = StrToInt(category->ReadString("Options",  "ItemsCount", NULL));
for(int cat = 1; cat <= CategoryCount; cat++) {
TreeView1->Items->Add(NULL,category->ReadString("Category",  IntToStr(cat), NULL));
  for(int item = 1; item <= ItemCount; item++) {
                if(category->ReadString("Item_"+IntToStr(item),  "category", NULL) == IntToStr(cat))
                {
                  TreeView1->Items->AddChild(TreeView1->Items->Item[cat-1+iii],category->ReadString("Item_"+IntToStr(item),  "name", NULL));
                  iii=iii+1 ;
                }
  }
}

Но там соравно был один недостаток, но который можно было обойти. Но твой вариант круче :).


Время: 13:07.

Время: 13:07.
© OSzone.net 2001-