Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

В TTreeNode::Data записать и прочитать AnsiString

11
04 марта 2008 года
oxotnik333
2.9K / / 03.08.2007
Заполняю 2 TreeView из БД:
 
Код:
map<AnsiString, TTreeNode*>NodeMap;
  map<AnsiString, TTreeNode*>NodeMap2;

// это дя 1-го TreeView, для 2-го примерно так же
  while (!sp->Eof)
        {
          NodeMap[sp->FieldByName("item")->AsString.Trim()] = TreeView1->Items->AddChildObject(NodeMap[sp->FieldByName("parent")->AsString.Trim()], sp->FieldByName("NAME_USER")->AsString.Trim(), (void*)(char*)sp->FieldByName("item")->AsString.Trim().c_str());
          sp->Next();
        }

затем пытаюсь прочитать TTreeNode::Data на TTreeView::OnClick:
 
Код:
TTreeNode *Node1 = TreeView1->Selected;
  TTreeNode *Node2 = TreeView2->Selected;
  AnsiString kod_user = (char*) Node1->Data;
  AnsiString kod_class = (char*)Node2->Data;

  Label1->Caption = kod_user;
  Label2->Caption = kod_class;

В результате в Label1/2 полная фигня.
Как правильно в TTreeNode::Data положить AnsiString, а затем его от туда достать.
ЗЫ: когда на форме было одно TreeView, вроде работало нормально
ЗЫЗЫ: с int такое дело работает на ура
489
04 марта 2008 года
NeO_u
277 / / 11.10.2006
Вопрос, а текст. которые ты пытаешься читать и писать случайно не русский?

И еще вопрос:
(void*)(char*)sp->FieldByName("item")->AsString.Trim().c_str() - зачем, ты преобразовываешь в char* ведь с_str() уже преобразовывает в char*.

И еще, почему ты читаешь Node1->Data, а не Node1->Text - который и так является AnsiString.
11
04 марта 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: NeO_u
Вопрос, а текст. которые ты пытаешься читать и писать случайно не русский?

И еще, почему ты читаешь Node1->Data, а не Node1->Text - который и так является AnsiString.



1. текст не русский, даже если б он и русский был что из этого?
2. Node1->Text и Node1->Data совершенно разные вещи, мне надо именно Node1->Data (в Node1->Text инфа меня меньше всего интересует)
3. Решение нашлось введением дополнительной

 
Код:
map<TTreeNode*, AnsiString>MapNode;

хотя можно было бы и по другому организовать буффер а в Node->Data хранить ссылку на него, но это геморно, т.к. надо следить за его уничтожением
1
04 марта 2008 года
kot_
7.3K / / 20.01.2000
Цитата: oxotnik333
Заполняю 2 TreeView из БД:
 
Код:
map<AnsiString, TTreeNode*>NodeMap;
  map<AnsiString, TTreeNode*>NodeMap2;

// это дя 1-го TreeView, для 2-го примерно так же
  while (!sp->Eof)
        {
          NodeMap[sp->FieldByName("item")->AsString.Trim()] = TreeView1->Items->AddChildObject(NodeMap[sp->FieldByName("parent")->AsString.Trim()], sp->FieldByName("NAME_USER")->AsString.Trim(), (void*)(char*)sp->FieldByName("item")->AsString.Trim().c_str());
          sp->Next();
        }

затем пытаюсь прочитать TTreeNode::Data на TTreeView::OnClick:
 
Код:
TTreeNode *Node1 = TreeView1->Selected;
  TTreeNode *Node2 = TreeView2->Selected;
  AnsiString kod_user = (char*) Node1->Data;
  AnsiString kod_class = (char*)Node2->Data;

  Label1->Caption = kod_user;
  Label2->Caption = kod_class;

В результате в Label1/2 полная фигня.
Как правильно в TTreeNode::Data положить AnsiString, а затем его от туда достать.
ЗЫ: когда на форме было одно TreeView, вроде работало нормально
ЗЫЗЫ: с int такое дело работает на ура


Запись:

 
Код:
TreeView1->Items->AddChildObject(NodeMap[sp->FieldByName("parent")->AsString.Trim()], sp->FieldByName("NAME_USER")->AsString.Trim(), (void*)new AnsiString(sp->FieldByName("item")->AsString.Trim()));
...

считывание:
 
Код:
AnsiString kod_user = *(AnsiString*) Node1->Data;
...
11
05 марта 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: kot_
Запись:
 
Код:
TreeView1->Items->AddChildObject(NodeMap[sp->FieldByName("parent")->AsString.Trim()], sp->FieldByName("NAME_USER")->AsString.Trim(), (void*)new AnsiString(sp->FieldByName("item")->AsString.Trim()));
...


я так понимаю при выходе из программы или перед удалением TTreeNode надо делать delete Node->Data, или автоматом будет чистится?
ЗЫ: в хелпе ВСВ6 я пример подходящий что то не нашел

246
05 марта 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: oxotnik333
я так понимаю при выходе из программы или перед удалением TTreeNode надо делать delete Node->Data


Надо, Федя, надо! (с)

1
05 марта 2008 года
kot_
7.3K / / 20.01.2000
Цитата: oxotnik333
я так понимаю при выходе из программы или перед удалением TTreeNode надо делать delete Node->Data, или автоматом будет чистится?
ЗЫ: в хелпе ВСВ6 я пример подходящий что то не нашел


По поводу чистить я так и не определился - надо или нет - с одной стороны - тринод - контейнер - и по идее должен чистить сам. С другой хз - вроде утечек памяти не наблюдалось.

11
05 марта 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: GIZMO
Надо, Федя, надо! (с)



[offtop]
хорошо, что меня не Федором зовут :D
[QUOTE=kot_] вроде утечек памяти не наблюдалось[/QUOTE]
[/offtop]

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог