Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.26;
Скачать: CL | DM;

Вниз

как сохранить и данные свойства 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
6-1226523473
Yozch1
2008-11-12 23:57
2010.09.26
Учесть в программе используемый в системе Proxy


2-1277722570
rar
2010-06-28 14:56
2010.09.26
dbgrideh


2-1278037272
novai
2010-07-02 06:21
2010.09.26
Записать содержимое GetMem в файл


3-1245585623
Кирилл
2009-06-21 16:00
2010.09.26
Quick Report с несколькими запросами


8-1205151598
Пётр
2008-03-10 15:19
2010.09.26
Подключение кодеков к TMediaPlayer