Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [C++Builder 2009] TTreeView

Ответить
Настройки темы
C/C++ - [C++Builder 2009] TTreeView

Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25


Конфигурация

Профиль | Отправить PM | Цитировать


Вот есть ини файл:
Код: Выделить весь код
[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));
		 }
   }
}
}
Но при таком коде все сабитемы добавляются не как саб итемы а как хрен знает что :

А надо так:

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 19:11, 17-04-2009

 

Аватара для Alan85

Забанен


Сообщения: 463
Благодарности: 91

Профиль | Цитировать


Цитата 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));
и будет все ок

Отправлено: 21:08, 17-04-2009 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


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

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Последний раз редактировалось crashtuak, 16-05-2009 в 16:05.


Отправлено: 20:39, 20-04-2009 | #3


Аватара для Alan85

Забанен


Сообщения: 463
Благодарности: 91

Профиль | Цитировать


Извини не все учел в цикле (не проверил). Вот как вышло:
Код: Выделить весь код
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)); // ну а тут добавил в текущую ветку все что надо
		 }
   }
}

Отправлено: 22:24, 20-04-2009 | #4


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


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 ;
		 }
   }
}
Но там соравно был один недостаток, но который можно было обойти. Но твой вариант круче .

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 07:10, 21-04-2009 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [C++Builder 2009] TTreeView

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - [С++ Builder 2009] Проблемы с созданием пользователей (наверно все дело в строках) crashtuak Программирование и базы данных 1 05-07-2009 22:58
C/C++ - Import *.tlb - как потом использовать полученный *.h ? (C++ Builder 2009) Sanchos Программирование и базы данных 1 23-06-2009 11:29
C/C++ - [ С++ Builder 2009 ] Управление сетевыми подключениями crashtuak Программирование и базы данных 1 11-06-2009 08:26
C/C++ - [C++Builder 2009] Форма по png файлу с альфа каналом (есть пример на дельфи) crashtuak Программирование и базы данных 9 16-04-2009 08:30
C/C++ - [решено] [C++Builder 2007] TTreeView & CheckBox crashtuak Программирование и базы данных 1 12-04-2009 12:08




 
Переход