4
私はvirtualtreeコンポーネントとマニュアル "Virtual TreeView tutorial"をダウンロードしました。私はチュートリアルとステップごとにコーディングに従います。チュートリアルの機能のほとんどは、savetofileとloadfromfileが機能しないことを除いて、大丈夫です。Delphiを使用して仮想ツリーコンポーネントのファイルを保存/ロードする方法は?
マイノードデータは、
type
PMytreedata = ^TMYTreeData;
TMYTreeData = record
Column0: String;
Column1: String;
Column2: String;
end;
質問が何か文字列がCOLUMN0に負けですがカラム1/2時にファイルからのロード。コードエラー
ずにノードのサイズを取得します ファイルからファイルをロードするためにprocedure TForm3.Button1Click(Sender: TObject); //CRETAE NEW NODE AND DATA
begin
Randomize;
Rand := Random(99);
XNode := VST.AddChild(nil);
if VST.AbsoluteIndex(XNode) > -1 then
begin
Data := VST.GetNodeData(Xnode);
Data^.Column0 := IntToStr(Rand)+EDIT1.Text + 'One' ;
Data^.Column1 := EDIT1.Text+'Two' + IntToStr(Rand + 10);
Data^.Column2 := EDIT1.Text+'Three' + IntToStr(Rand - 10);
end;
end;
procedure TForm3.Button2Click(Sender: TObject);//ADDCHILD
var
XNode: PVirtualNode;
Data: PMytreedata;
begin
if not Assigned(VST.FocusedNode) then
Exit;
XNode := VST.AddChild(VST.FocusedNode);
Data := VST.GetNodeData(Xnode);
Data^.Column0 := EDIT1.Text ;
Data^.Column1 := EDIT2.Text ;
Data^.Column2 := EDIT3.Text ;
VST.Expanded[VST.FocusedNode] := True;
end;
保存
procedure TForm3.Button4Click(Sender: TObject);
begin
VST.SaveToFile('C:\vst.at1');
end;
procedure TForm3.Button5Click(Sender: TObject);
begin
VST.LoadFromFile('C:\vst.at1');
end;
:
コードが
の下に新しいノードとデータを作成しています
procedure TForm3.VSTGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
begin
NodeDataSize := SizeOf(TMYTreeData);//WITHOUT THE CODE,ERROR COMING .
end;
表示テキスト
procedure TForm3.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var
Data: PMytreedata;
begin
Data := VST.GetNodeData(Node);
case Column of
0: CellText := Data^.Column0;
1: CellText := Data^.Column1;
2: CellText := Data^.Column2;
end;
end;
LOADフォームファイル
procedure TForm3.VSTLoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);//LOAD FORM FILE
var
Data: PMytreedata;
Len: Integer;
begin
Data := VST.GetNodeData(Node);
Stream.read(Len, SizeOf(Len));
SetLength(Data^.Column0, Len);
Stream.read(PChar(Data^.Column0)^, Len);
Stream.read(Len, SizeOf(Len));
SetLength(Data^.Column1, Len);
Stream.read(PChar(Data^.Column1)^, Len);
Stream.read(Len, SizeOf(Len));
SetLength(Data^.Column2, Len);
Stream.read(PChar(Data^.Column2)^, Len);
end;
Unicodeのデルファイ、2009年に
procedure TForm3.VSTSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream); //SAVE TO FILE
var
Data: PMytreedata;
Len: Integer;
begin
Data := VST.GetNodeData(Node);
Len := Length(Data^.Column0);
Stream.write(Len, SizeOf(Len));
Stream.write(PChar(Data^.Column0)^, Len);
Len := Length(Data^.Column1);
Stream.write(Len, SizeOf(Len));
Stream.write(PChar(Data^.Column1)^, Len);
Len := Length(Data^.Column2);
Stream.write(Len, SizeOf(Len));
Stream.write(PChar(Data^.Column2)^, Len);
end;
私はwritebufferの使用経験がありません。私はそれをテストし、それは正常に動作します。あなたのためのあなたのための迅速かつ正確な解決策。ありがとう – u950321