C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как прицепить данные к ноде TVirtualStringTree?
Andrew Build
Отправлено: 08.12.2009, 13:50


Ученик-кочегар

Группа: Участник
Сообщений: 3



При заполнении TVirtualStringTree 2-ым параметром функции AddChild() я ставлю указатель на объект моей структуры. При заполнении текста нод при помощи функцией GetNodeData() получаю указатель на структуру, одно из полей которой — текст ноды. Но в тексте отображается абракодабра. В чем дело? Вот код:

Unit1.h:

CODE

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "VirtualTrees.hpp"
//---------------------------------------------------------------------------
struct nodeInfo
{
 WideString name;
 int type;
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
       TVirtualStringTree *VirtualStringTree;
       void __fastcall VTGetText(TBaseVirtualTree *Sender,
         PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType,
         WideString &CellText);
private: // User declarations

public:  // User declarations
       __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif  


Unit1.cpp:
CODE

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "VirtualTrees"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
VirtualStringTree->NodeDataSize=sizeof(nodeInfo);
nodeInfo *ni;
ni= new nodeInfo();
ni->name="one";
ni->type=1;
TVirtualNode *node;
VirtualStringTree->NodeDataSize=sizeof(nodeInfo);

node=VirtualStringTree->AddChild(NULL,ni);

nodeInfo *ni1;
ni1= new nodeInfo();
ni1->name="two";
ni1->type=2;
VirtualStringTree->AddChild(node,ni1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::VTGetText(TBaseVirtualTree *Sender,
     PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType,
     WideString &CellText)
{
 nodeInfo *nodeInf;
 nodeInf=new nodeInfo();
 nodeInf=(nodeInfo *)VirtualStringTree->GetNodeData(Node);
 CellText=nodeInf->name;

}
//---------------------------------------------------------------------------


Вернуться в Вопросы программирования в C++Builder