Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.09.2013, 02:35
Wervolfe Wervolfe вне форума
Прохожий
 
Регистрация: 07.09.2013
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Прошу Вашей помощи по сохранению TreeView в файл (не XML)

Добрый день всем. Необходимы исходники примера, чтобы сохранить дерево с данными (string и integer) в файл и восстановление из файла.

Примеры все посмотрел, перелистал все поисковики, сижу ночами уже несколько дней, но разобраться не могу, так как я не программист. В готовом примере смогу разобраться. Заранее спасибо.
Ответить с цитированием
  #2  
Старый 14.09.2013, 04:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Wervolfe
Добрый день всем. Необходимы исходники примера, чтобы сохранить дерево с данными (string и integer) в файл и восстановление из файла.

Примеры все посмотрел, перелистал все поисковики, сижу ночами уже несколько дней, но разобраться не могу, так как я не программист. В готовом примере смогу разобраться. Заранее спасибо.

Зависит от того, как у тебя храняться данные в дереве.
В принципе, т.к. xml это, по сути, тексовый файл, то можно сохранять очень просто:
Код:
procedure SaveTreeToXML(ATree : TTreeView; AFilaName : String);

  procedure SaveNode(ANode : TTreeNode; AList : TStringList);
  var
    I : Integer;
  begin
    AList.Add('<Node value="' + ANode.Caption + '">');
    For I := 0 To Node.Items.Count-1 Do
      SaveNode(Node.Items[i],AList);
    AList.Add('</Node>');
  end;

var
  I : Integer;
  L : TStringList; // Для простоты сохраняем в список
begin
  L : TStringList.Create;
  L.Add('<Tree>');
  For I := 0 To TreeView.Items.Count-1 Do
    If TreView.Items[i].Parent = Nil Then
      SaveNode(TreView.Items[i],L);
  L.Add('</Tree'>);
  L.SaveToFile(AFilaName);
  L.Free;
end;

С чтением чуть сложнее, но тоже не сложно. Просто читаешь строчку и принимаешь решение, что делать.

Если стукрура данных сложнее, то рекомендую работать с TXMLDocument. По сути, это то же дерево, так что построить одно дерево по другому не так и сложно.
Ответить с цитированием
  #3  
Старый 14.09.2013, 05:06
Wervolfe Wervolfe вне форума
Прохожий
 
Регистрация: 07.09.2013
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Запись у меня вот такая:
Код:
type
  PNodeOptions = ^NodeOptions;
  NodeOptions=record
   Name: String[255];
   Surname: String[255];
   Address: String[255];
   Indes: Integer;
  end;
MAD: Пользуемся тегами!
Я сейчас на примере рассматриваю вот этот http://k210.org/delphi/main/1/ вариант. Но я не могу в нем понять что такое "TNodeSaveDataProc = " в объявлении типов и отсюда непонятна вот эта конструкция "
Код:
Procedure SaveTreeviewToStream( tv: TTreeview; S: TStream; 
saveProc: TNodeSaveDataProc );
" Помогите разобрать вот этот пример. Саму суть я понял.

Последний раз редактировалось M.A.D.M.A.N., 14.09.2013 в 11:13.
Ответить с цитированием
  #4  
Старый 18.09.2013, 15:39
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно сделать проще - сохранять содержимое формы целиком, после перезапуска сборки состояние TreeView восстановится полностью, да и не только дерева.
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  FStr: TFileStream;
  MemStr: TMemoryStream;
begin
 if FileExists('Form1.ini') then
   begin
    Form1.DestroyComponents;
    FStr:= TFileStream.Create('Form1.ini', fmOpenRead);
    MemStr:= TMemoryStream.Create;
    ObjectTextToBinary(FStr, MemStr);
    MemStr.Position:= 0;
    MemStr.ReadComponent(Form1);
    MemStr.Free;
    FStr.Free;
   end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  FStr: TFileStream;
  MemStr: TMemoryStream;
begin
  FStr:= TFileStream.Create('Form1.ini', fmCreate);
  MemStr:= TMemoryStream.Create;
  MemStr.WriteComponent(form1);
  MemStr.Position:= 0;
  ObjectBinaryToText(MemStr, FStr);
  MemStr.Free;
  FStr.Free;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:30.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025