Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
8-1205781369
VoVan
2008-03-17 22:16
2010.09.26
midi->wav


3-1245673105
dmitrot
2009-06-22 16:18
2010.09.26
Scroll DBGrid


2-1277501484
Германн
2010-06-26 01:31
2010.09.26
У TStringGrid отсутствует ScrollBar


15-1277985435
aka
2010-07-01 15:57
2010.09.26
какой сайт написать?


2-1278004485
faiwer
2010-07-01 21:14
2010.09.26
Игнорирование ошибки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский