C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[48476] Re:델파이 소스가 있긴한데..제가 델파이를 잘몰라서..
또아리 [sky4242] 1383 읽음    2007-03-20 19:51
Help에 있는 부분을 발취한건데요...이해가 잘 가지 않네요..

For saving the tree the procedure
procedure TBaseVirtualTree.SaveToFile(const FileName: TFileName);
is called. Thereby the structure of the tree is automatically stored. In order to save our additional data there is an event
OnSaveNode where we can simply store our data into the provided stream.
property OnSaveNode: TVTSaveNodeEvent read FOnSaveNode write FOnSaveNode;
If OnSaveNode is triggered then the method SaveNode of the particular node class will be called:
procedure TMyForm.MyTreeSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream);
begin
PTreeData(Sender.GetNodeData(Node)).BasicND.SaveToFile(Stream);
end;
In the SaveNode method of the class fields like node name, image index etc. are stored in the tree:

//-------------------------------------------------------------------Save Node
procedure TBasicNodeData.SaveNode(Stream: TStream);
var
size: Integer;
begin
                     // save type of the node
Stream.Write(Art, SizeOf(Art));
                   // store cName
Size := Length(cName) + 1; // include terminating #0
Stream.Write(Size, SizeOf(Size)); // store length of the string
Stream.Write(PChar(cName)^, Size); // now the string itself
                // store cImageIndex
Stream.Write(cImageIndex, SizeOf(cImageIndex));
               // store cImageIndexFocus
Stream.Write(cImageIndexFocus, SizeOf(cImageIndexFocus));
Virtual Treeview step by step Virtual Treeview

// store cChildrenAllowed
Stream.Write(cChildrenAllowed, SizeOf(cChildrenAllowed));
end;

//---------------------------------------------------------------------Load
try
// load tree
MyTree.LoadFromFile(MainControlForm.Filename);
except
on E: Exception do
begin
Application.MessageBox(PChar(E.Message), PChar('Error while loading.'), MB_OK);
MainControlForm.Filename := '';
// create tree with top level node (since loading failed)
Node := MyTree.AddChild(nil);
NodeD := MyTree.GetNodeData(Node);
NodeD.BasicND := TBasicNodeData.Create('new project');
end;
end;
//------------------------------------------------------------------------------OnLoadNode Event
By the call of LoadFromFile the event OnLoadNode will be triggered and consequently the method LoadNode:
procedure TBasicNodeData.LoadNode(Stream: TStream);
var
Size: Integer;
StrBuffer: PChar;
begin
// load cName
Stream.Read(Size, SizeOf(Size)); // length of the string
StrBuffer := AllocMem(Size); // get temporary memory
Stream.Read(StrBuffer^, Size); // read the string
cName := StrBuffer;
FreeMem(StrBuffer);
// Alternatively you can simply use:
// SetLength(cName, Size);
// Stream.Read(PChar(cName)^, Size);
// load cImageIndex
Stream.Read(cImageIndex, SizeOf(cImageIndex));
// load cImageIndexFocus
Stream.Read(cImageIndexFocus, SizeOf(cImageIndexFocus));
// load cChildrenAllowed
Stream.Read(cChildrenAllowed, SizeOf(cChildrenAllowed));
end;

+ -

관련 글 리스트
48474 Virtual Treeview Load/Save에 대한 질문..도와주세요 또아리 1205 2007/03/20
48481     Re:Virtual Treeview Load/Save에 대한 질문..도와주세요 (추가) 아루스 1210 2007/03/20
48490         Re:Re:감사합니다(냉무) 또아리 1057 2007/03/21
48476     Re:델파이 소스가 있긴한데..제가 델파이를 잘몰라서.. 또아리 1383 2007/03/20
48482         Re:Re:델파이 소스가 있긴한데..제가 델파이를 잘몰라서.. 아루스 1998 2007/03/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.