|
VirtualStringTree->SaveToFile()을 호출하면 OnSaveNode 이벤트가 발생하고,
VirTualStringTree->LoadFromFile()을 호출하면 OnLoadNode 이벤트가 발생하더군요.
그래서 다음과 같이 코딩을 해 봤습니다.
아래코드중 mysql_nodedata 는 아래와 같이 정의했습니다.
typedef struct mysql_db_nodedata {
AnsiString node_name;
int ImageIndex;
} mysql_nodedata;
여러군데 찾아보다가 델파이 코드 밖에 없어서,
델파이 코드를 C++ Builder로 바꾼건데요..
SaveNode 이벤트
void __fastcall TForm1::VSTSaveNode(TBaseVirtualTree *Sender, PVirtualNode Node,
TStream *Stream)
{
PVirtualNode root_Node, temp_node;
mysql_nodedata *pNodeData, *pSubNodeData;
pNodeData = (mysql_nodedata*)Form1->VST->GetNodeData(Node);
Stream->Write( pNodeData,sizeof(pNodeData));
}
SaveNode 이벤트에서 Node 정보를 갖구 오고..
SaveToFile()을 호출하면 저장은 됩니다.
문제는 제대로 저장되는것인지 모르겠네요.
LoadFromFile()로 단순히 불러왔을때 트리의 노드가 표시되고 Caption은 표시가 되지 않습니다.
그래서 LoadNode이벤트에 아래와 같은 코드를 추가해 봤습니다.
//LoadNode 이벤트
void __fastcall TForm1::VSTLoadNode(TBaseVirtualTree *Sender, PVirtualNode Node,
TStream *Stream)
{
mysql_nodedata *pNodeData, *pSubNodeData;
pNodeData = (mysql_nodedata*)Form1->VST->GetNodeData(Node);
Stream->Read(pNodeData, sizeof(pNodeData));
}
그랬더니, Node로부터 얻은 pNodeData ->node_name이 NULL로 표시되더군요.
저장될때는 node_name이 저장됩니다.
여기까지가 제가 해본 건데요...
뭘 더 해줘야 하나요?
혹시 아시는 분이 있으시면 설명부탁드리구요.
빌더코드로 된 간단한 예제라도 올려주시면 감사하겠습니다.
좋은 하루되세요~~~
|