|
TTreeView아이템은 TTreeNode *형입니다.
TTreeNode 의 Data는 void* 형입니다.
void * 이므로 어떤형식의 Data라도 그 주소를 저장하면 됩니다.
아래와 같이 클래스 포인터를 저장해도 되고
구조체의 주소를 저장해도 되고...
아래는 트리에 파일이름을 아이템으로 등록할때
마우스가 움직이면 파일의 상세정보를 트리의 힌트로 보여주는 코드입니다.
class MyFileInfo
{
public:
int ftype;
int fsize;
String fpath;
String fname;
DateTime dt_create;
DateTime dt_edit;
DateTime dt_access;
};
//파일정보를 넣을때..
MyFileInfo*finfo=new MyFileInfo;
finfo.fName="adfafd.txt";
finfo.isize=123;
TTreeNode *node=TreeView1->Items->Add(NULL,finfo.fName);
node->Data=finfo;
//가져올때
void __fastcall TForm1::TreeView1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
//
TTreeNode *node=TreeView1->GetNodeAt(X,Y); //마우스 위치의 Node를 찾는다.
if(node==NULL)return; //Node가 없으면 끝낸다.
MyFileInfo*finfo=(MyFileInfo*)node; //===> 핵심 node의 Data에 있는 포인트 정보를 이용하여...
String str;
str="파일명 : "+finfo->fname \r\n사이즈:"+IntToStr(finfo->isize)+"\r\n최종수정일"+dt_edit.FormatString("yyyy-mm-dd");
TreeView1->Hint=str;
}
//---------------------------------------------------------------------------
//추신
이 void * 형의 Data변수는 TListView의 아이템인 TListItem에도 있습니다.
이를 이용만 잘하면 아주 유용하게 쓸수 있습니다.
예를 들어
Sorting할때도 쓰면 좋구
만약 DB에 정보를 리스트에 뿌려줄때
리스트에는 보여주면 안되는 아이디같은것을 숨겨두고 참조할때도 유용합니다.
이범상 님이 쓰신 글 :
: 트리뷰에 보니 각 노드에 데이터 입력이 되던데
: 이거 어떻게 사용합니까???
:
: TreeView3->Items->AddChild(bootHeadNode,nodeCaption);
: //데이터 입력
: bootHeadNode->Data = new int(0);
:
: //데이터 읽기
: *(int *)(bootHeadNode->Data);
:
: bootHeadNode은 트리노드인데 제가 사용법을 잘몰라서 위처럼 사용해서
: 노드에 데이터를 입력하고 읽고있습니다.
:
: 근데 아무리봐도 영 이상해서 질문드립니다.
:
: 고수님들 갈켜주세요
|