VirtualStringTree 구성 요소를 사용하여 간단한 연락처 관리자를 구현하려고합니다. 데이터 구조의 경우어떻게하면 svTree 데이터 구조를 저장하고로드 할 수 있습니까?
, 내가 다른 스택에 언급의 Linas에 의해 svTree을 사용하고 있습니다 : 나는 모든 텍스트를 포함 세 개의 열이있는 목록 뷰 구성 요소처럼 보이도록 설정해야 오버플로 질문.
procedure TForm1.FormCreate(Sender: TObject);
begin
MyTree := TSVTree<TMainData>.Create(False);
MyTree.VirtualTree := vst1;
end;
이 같은 TEdits에서 데이터를 추가하고 : :이이 폼의 한 OnCreate에서
type
TMainData = record
Name, Email, Password: string;
end;
:
는 나는이 같은 기록을 선언 한
procedure TForm1.BuildStructure;
var
svNode: TSVTreeNode<TMainData>;
Data: TMainData;
begin
MyTree.BeginUpdate;
try
Data.Name := edtname.Text;
Data.Email := edtEmail.Text;
Data.Password := edtPassword.Text;
svNode := MyTree.AddChild(nil, Data);
finally
MyTree.EndUpdate;
end;
Label1.Caption := 'Count: '+IntToStr(MyTree.TotalCount);
end;
이 내용을 다시로드 할 스트림이나 파일에 저장하려면 어떻게해야합니까? MyTree.SaveToFile('C:/Test.dat')
과 MyTree.LoadFromFile('C:/Test.dat')
을 사용해 보았습니다.하지만 다시로드 된 경우 트리보기에는 데이터가없고 빈 행만 표시됩니다. 당신은 OnLoadNode하고 TSVTree에 대한 OnSaveNode 절차를 설정하고 여기 로직을 구현해야
procedure TForm.VTLoadNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);
begin
// Load Node Data record from the stream
end;
procedure TForm.VTSaveNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);
begin
// Save Node Data record to the stream
end;
정말 고마워요, 지금 작동하고있어 내가 무엇을 놓쳤는 지 봅니다. 그런 식으로 "친절"하려고했지만'Stream.WriteString' 부분에서 + 연산자를 사용하여 모두 결합했습니다! doh! - 당신의 대답을 사용하는 유일한 문제는 호환되지 않는 Types with :'Assigned (Node.FValue) then'입니다.하지만이 부분을 제거하면 컴파일되고 작동합니다. 이걸 필요로합니까, 아니면 생략하면 더 이상 문제가 발생할 것입니까? – Shambhala
데이터 구조를 채우거나 레코드를 사용하는 경우이 줄이 필요하지 않습니다. 기본적으로 VirtualStringTree로 작업 할 때이 글을 쓰곤합니다. – Linas
그 부분을 다시 설명해 주셔서 감사합니다. – Shambhala