만해 님이 쓰신 글 :
: 안녕하세요 만해입니다.
:
: 어제 컴포넌트 자료실에 있는 VirtualTree 컴포넌트를 다운 받아서
:
: 천신만고 끝에 깔아서
:
: 지금 사용하고 있는데요
:
: 그냥 단순히 자료 넣는건 알겠는데
:
: 제가 원하는 형식으로 자료를 넣을려니깐
:
: 잘 안되네요
:
: 지금 도움말도 뒤지고 했는데도 잘 모르곘고
:
: 도움 부탁 드립니다.
:
: typedef struct
: {
: AnsiString Data;
: LONG ID;
: LONG Depth;
: }TTreeData;
:
: 이건 헤더 파일에 정의된 데이타 형이고요
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: TTreeData* Data = new TTreeData;
: Data->Data = "Test";
: Data->ID = 1;
: Data->Depth = 1;
: VirtualStringTree2->NodeDataSize = sizeof(Data);
: VirtualStringTree2->AddChild(NULL,(void*)Data);
: }
:
: 이건 자료를 입력 하는 루틴입니다.
:
: 분명히 도움말에 나온것 처럼 구조제를 만들어서 집어 넣는데도
:
: 제가 원하는 식으로는 안나오고
:
: 그냥 기본형만 나오네요
:
: 고수님들의 도움 부탁 드립니다.
답변이 될지 모르겠지만 제가 한 걸 보여 드리죠.
저는 먼저
typedef struct
{
AnsiString Text;
int ImageIndex;
int index;
}TTreeData;
로 선언 했구요 (이 구조체를 원하는 형태로 선언한다)
void __fastcall TForm1::FormShow(void)
{
TTreeData *T = new TTreeData;
TVirtualNode *N = new TVirtualNode;
Tree->NodeDataSize = sizeof(TTreeData); //구조체의 크기를 전달하고
N = Tree->AddChild(NULL,(TTreeData *)T); //루트 노드에 하위 노드를 추가한다
T=(TTreeData *)Tree->GetNodeData(N); //추가한 노드의 정보를 얻어서
T->Text = "test입니다"; //내용을 넣는다.
}
에서 T->Text에 데이터를 넣었습니다.
그리고
void __fastcall TForm1::TreeGetText(TBaseVirtualTree *Sender,
PVirtualNode Node, int Column, TVSTTextType TextType,
WideString &CellText)
{
TTreeData *T = new TTreeData;
T=(TTreeData *)Sender->GetNodeData(Node);
CellText = T->Text; //추가할 내용이 선택된 노드에 적용된다.
}
이렇게 했습니다.
만약 루프를 돌릴때 TreeGetText가 바로 호출되지 않더군요
루프 다 돌고 나서 한꺼번에 TreeGetText가 반복적으로 돌아가더군요....
추가적으로 Header부분을 조정하면 column에 따라 내용을 넣을 수 있습니다.
도움이 되었으면 합니다.
김재철....
|