Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > VirtualTree & C++ Builder


Автор: Evgesha 26.9.2012, 21:55
Как создать структуру. 
надо примерно так

книга1
   часть1
       глава1
       глава2
    часть2  
       глава1
       глава2 
книга2
   часть1
       глава1
       глава2
    часть2  
       глава1
       глава2

Не соображу как заполнить дерево данными из переменных
Зарание спасибо

Код


    for (int i=0; i<=10; i++)
            {
             SchienenName[i];

             RootNode=VirtualStringTree1->AddChild(NULL);

             ChildNode=VirtualStringTree1->InsertNode(RootNode,amAddChildFirst);
             ChildNode=VirtualStringTree1->InsertNode(ChildNode,amAddChildFirst);

            }

Автор: Riviero 27.9.2012, 10:24
Миллион раз обсуждалось, пользуйся поиском 
http://devdelphi.ru/?p=230

Автор: Evgesha 27.9.2012, 19:46
Цитата

Миллион раз обсуждалось, пользуйся поиском 


Согласен, но примера кода na С++ Builder так и не нашел
Помогите пожалуйста

Автор: Evgesha 28.9.2012, 19:45
напишите как поменат техт в Children Node
не могу разобратса

Автор: artsb 28.9.2012, 20:08
1. Найти нужного Child'а
2. Child->Caption = "blah-blah-blah";

Автор: Evgesha 1.10.2012, 20:47
как дат название ноду част1 и глава1
ПОомогите

Автор: artsb 1.10.2012, 22:13
Вот, ковыряйтесь:
http://devdelphi.ru/?p=230
http://devdelphi.ru/?tag=virtualstringtree

Правда там на Delphi. Но думаю, что это не проблема.

ЗЫ а мне лень ставить этот компонент и разбираться с ним )

Автор: Evgesha 1.10.2012, 22:18
вот именно что проблема
за сылки спасибо но уже изучил
не получается дочерниму ноду техт влепит, берет все время техт от родителского

пожайлуста дайте кусок кода  smile  smile  smile 

Автор: artsb 1.10.2012, 22:28
По-моему, в статье по ссылке всё достаточно подробно расписано. Что конкретно не получается у вас? Где код, который не так работает?

Автор: Evgesha 1.10.2012, 22:32
Код

    for (int i=0; i<=9; i++)
            {
             SchienenName[i]=Form02_SchieneSchraube->CB_Schienenprofil->Items->operator [](i+1);

             SNode = VST->AddChild(NULL);
             NewSchiene = (TVTNodeData *)VST->GetNodeData(SNode);
             NewSchiene->Index = i;
             NewSchiene->SCaption = SchienenName[i];

             ANode = VST->AddChild(SNode);
             NewAnker = (TVTNodeData *)VST->GetNodeData(ANode);
             NewAnker->Index = i+10;
             NewAnker->ACaption = SchienenAnker;
            }

void __fastcall TFormErgebnis::VSTGetText(TBaseVirtualTree *Sender, PVirtualNode Node,
                               TColumnIndex Column, TVSTTextType TextType, UnicodeString &CellText)
{

             NewSchiene = (TVTNodeData *)VST->GetNodeData(SNode);
             NewAnker = (TVTNodeData *)VST->GetNodeData(ANode);



/*

switch (Column)
            {
             case 0: CellText = SchienenName[Node->Index];
             break;
             case 1: CellText = "22222222222222";
             break;
             case 2: CellText = "33333333333333";
             break;
            }
*/
}

Автор: artsb 1.10.2012, 22:36
Так и не понял, откуда выдран этот кусок...
Судя по всему, вы не внимательно прочитали информацию о событии OnGetText. Обратите на него внимание.

Автор: Evgesha 1.10.2012, 22:42
выдран из моей проги
инфу прочитал так и не понял, наверно уже туплу

 smile 

Автор: Riviero 2.10.2012, 09:12
Код

// Одна структура на все дерево (НЕ отдельно на парентов и чилдренов)
typedef struct
{
    String Name;
    int Count;
}NodeRec, *ptrNodeRec;

//---------------------------------------------------------------------------
//        Определяешь размер ноды
void __fastcall TForm1::VirtualStringTree1GetNodeDataSize(
      TBaseVirtualTree *Sender, int &NodeDataSize)
{
    NodeDataSize = sizeof(NodeRec);
}
//---------------------------------------------------------------------------
//        Отображаешь дерево
void __fastcall TForm1::VirtualStringTree1GetText(TBaseVirtualTree *Sender,
      PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType,
      WideString &CellText)
{
    ptrNodeRec Rec = (NodeRec*)Sender->GetNodeData(Node);
    switch (Column) {
        case 0 : CellText = Rec->Name; break;
        case 1 : CellText = (String)Rec->Count; break;
    }
}
//---------------------------------------------------------------------------
//        Заполняешь дерево
void TForm1::FillTable()
{
    ptrNodeRec parentRec, childRec;
    PVirtualNode Child, Parent;
    for (int i = 0; i < 10; i++) {
        Parent = VirtualStringTree1->AddChild(0);
        parentRec = (NodeRec*)VirtualStringTree1->GetNodeData(Parent);
        parentRec->Name = "Parent";
        for (int j = 0; j < 10; j++) {
            Child = VirtualStringTree1->AddChild(Parent);
            childRec = (NodeRec*)VirtualStringTree1->GetNodeData(Child);
            childRec->Name = "Child";
        }
        parentRec->Count =    Parent->ChildCount;
    }

}

Автор: artsb 2.10.2012, 10:25
Вот, собственно, Riviero, вам перевёл то что в статье на C++. Теперь понятно?

Автор: Evgesha 2.10.2012, 23:47
Да тепер все понятно все заработало  smile  smile .
Спасибо всем за содействие  smile .
Отделное спасибо Riviero за пример  smile .


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)