Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];
Внизкак сохранить и данные свойства Data к узлам Treeview в файл? Найти похожие ветки
← →
linuxoid (2010-07-02 13:59) [0]type
PRec = ^Rec;
Rec = Record
S : string;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
R : PRec;
TreeNode : TTreeNode;
TreeNode2 : TTreeNode;
begin
New(R);
R.S := edit2.Text;
TreeNode := TreeView1.Items.AddObject(nil,edit1.Text,R);
end;
procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if treeview1.Selected<>nil then edit1.Text:=treeview1.Selected.Text;
edit2.Text:= Rec(Node.Data^).S;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
treeview1.SaveToFile("test.trv"); //сохранение
//.........
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
treeview1.LoadFromFile("test.trv"); //загрузка
//...........
end;
узлы сохраняются и загружаются без проблем, а вот с node.data не могу понять....
← →
12 © (2010-07-02 14:04) [1]treeview1.SaveToFile
ctrl + клик, допрыгиваем до
procedure TTreeStrings.SaveTreeToStream(Stream: TStream);
и делаем по аналогии
← →
linuxoid (2010-07-02 14:10) [2]не понял что-то? я впервые работаю с этим компонентом.
← →
12 © (2010-07-02 14:23) [3]нажимаем ctrl, жмакаем по treeview1.SaveToFile
попадаем на
procedure TCustomTreeView.SaveToFile(const FileName: string);
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
SaveToStream(Stream);
finally
Stream.Free;
end;
end;
нажимаем ctrl, жмакаем по SaveToStream(Stream);
попадаем на
procedure TCustomTreeView.SaveToStream(Stream: TStream);
begin
with TTreeStrings.Create(Items) do
try
SaveTreeToStream(Stream);
finally
Free;
end;
end;
нажимаем ctrl, жмакаем по SaveTreeToStream(Stream);
попадаем на
procedure TTreeStrings.SaveTreeToStream(Stream: TStream);
const
TabChar = #9;
EndOfLine = #13#10;
var
i: Integer;
ANode: TTreeNode;
NodeStr: string;
begin
if Count > 0 then
begin
ANode := Owner[0];
while ANode <> nil do
begin
NodeStr := "";
for i := 0 to ANode.Level - 1 do NodeStr := NodeStr + TabChar ;
NodeStr := NodeStr + ANode.Text + EndOfLine;
Stream.Write(Pointer(NodeStr)^, Length(NodeStr));
ANode := ANode.GetNext;
end;
end;
end;
for i := 0 to ANode.Level - 1 do NodeStr := NodeStr +(Например сюда можно вставить инфу из нода, как понравится, только придется подгружать с учетом этого изменения, по аналогии) + TabChar;
← →
12 © (2010-07-02 14:24) [4]да, генофонд трогать не надо :)
надо сделать наследника и свой метод
или выдрать только идею
← →
linuxoid (2010-07-02 14:35) [5]не понял с этим - TCustomTreeView.SaveToFile???
нельзя ли все это в кнопку сохранить записать?
← →
12 © (2010-07-02 14:41) [6]можно, алгоритм указан в
if Count > 0 then
begin
ANode := Owner[0];
while ANode <> nil do
begin
NodeStr := "";
for i := 0 to ANode.Level - 1 do NodeStr := NodeStr + TabChar ;
NodeStr := NodeStr + ANode.Text + EndOfLine;
Stream.Write(Pointer(NodeStr)^, Length(NodeStr));
ANode := ANode.GetNext;
end;
end;
← →
linuxoid (2010-07-02 14:52) [7]откуда берется значение Owner[0]; ???
← →
12 © (2010-07-02 15:12) [8]да причем тут это
идея - обойти все ноды
n := TreeView1.Items.GetFirstNode;
while n <> nil do
begin
ShowMessage(N.Text);
n := n.GetNext;
end;
← →
linuxoid (2010-07-02 15:25) [9]все равно еле врубаюсь.
если не трудно, можешь дописать код в ...
procedure TForm1.Button2Click(Sender: TObject);
begin
treeview1.SaveToFile("test.trv"); //сохранение
//.........
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
treeview1.LoadFromFile("test.trv"); //загрузка
//...........
end;
← →
12 © (2010-07-02 15:33) [10]могу
но не буду лишать тебя удовольствия решить самому
← →
linuxoid (2010-07-02 15:42) [11]я уже лишен этого удовольствия. в нодах вообще что не получается.
благодаря вам немного разобрался в добавлении.
но теперь хотелось бы чтоб все это сохранять в файл и загружать из него.
ну и потом изменять когда это нужно будет.
← →
12 © (2010-07-02 16:11) [12]не, все у нас получится :)
вот пример записи - пишите по аналогии загрузку
Записать так можно
N :TTreeNode;
SL : tStringList;
SL:= tStringList.Create; // список строк
n := treeview1.Items.GetFirstNode; //первый нод
while n <> nil do // пока не кончатся
begin
SL.Add(Rec(N.Data^).Str); // значение в список
n := n.GetNext; // взять следующий
end;
SL.SaveToFile("ValueOfNode.von"); // записать в файло
FreeAndNil(SL); // больше не нужен список
ps
могут быть опечатки, на синтаксис не проверил
← →
linuxoid (2010-07-02 16:24) [13]так. все сохранилось в указанный файл.
теперь как это обратно загрузить (formcreate) и при выделении(TreeView1Changing) на определенный узел показывал нужный нам нод.
← →
12 © (2010-07-02 16:34) [14]> теперь как это обратно загрузить
дерево должно быть готово
считать значения
перебирать ноды и присваивать им считанные значения
Сам что-то напишешь уже?
← →
linuxoid (2010-07-02 16:51) [15]
> > Сам что-то напишешь уже?
я первый раз сталкиваюсь с этим. хотелось бы все это на примере разобраться.
незнаю как связать нод с деревом
← →
12 © (2010-07-02 17:02) [16]ну, как то так
могут быть опечатки, на синтаксис не проверил
SL:= tStringList.Create; // список строк
SL.LoadfFomFile("ValueOfNode.von"); // записать в файло
n := treeview1.Items.GetFirstNode; //первый нод
while n <> nil do // пока не кончатся
begin
new(R);
R.Str := SL[i];
N.Data := R;
n := n.GetNext; // взять следующий
inc(i);
end;
FreeAndNil(SL); // больше не нужен список
← →
linuxoid (2010-07-02 17:12) [17]R.Str := SL[i];
откуда берется значение i?
← →
12 © (2010-07-02 17:14) [18]> inc(i);
← →
12 © (2010-07-02 17:17) [19]> SL[i];
или SL.strings[i]?
короче, строка из списка, как там она точно получается..
← →
linuxoid (2010-07-02 18:05) [20]вроде что-то начинается получаться но все равно
значение i никак не могу связать с нужным узлом.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c