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

Вниз

Сохранение TreeView и Data   Найти похожие ветки 

 
N!tro ©   (2005-07-23 08:09) [0]

Сохраняю TreeView в ini-файл. Подскажите как можно сохранить свойство дата (запись), чтобы при загрузке программы всё восстанавливалось.]
Вот так сохраняю:
procedure TForm1.Button1Click(Sender: TObject);
var
 ini: TIniFile;
 s: TMemoryStream;
begin
 S := TMemoryStream.Create;
 Ini := TiniFile.Create("c:\temp\demo.ini");
 TreeView.SaveToStream(S);
 s.Seek(0, soFromBeginning);
 ini.WriteBinaryStream("1", "1", S);
 ini.Free;
 s.Free;
end;


 
Vir ©   (2005-07-23 14:01) [1]

А что ты имеешь в виду под свойством Дата?
Текущию дату или TTreeNode.Data?


 
N!tro ©   (2005-07-23 14:48) [2]

TTreeNode.Data (в вопросе же указал: свойство дата (запись))
Запись состоит из 2 полей: String, Integer


 
Vir ©   (2005-07-23 15:42) [3]

Ну тут ничего стандартного не выйдет, дело в том что TTreeNode.Data   это pointer и соответсвенно TreeView.SaveToStream максимум что может это сохранить в поток адрес этого указателя, что тебе при новой загрузке приложения совершенно ничего не даст.

Потому выход следующий - писать процедуру сохранения и загрузки самому. Кусков вода приводить не буду но общие принципы расскажу.
Придеться обходить все ветви последовательно и сохранять их параметры, причем по мимо нужных лично тебе (текст, данные, может еще что) обязательно нужно сохранять еще и данные о том какая ветвь владеет этой ветвью.

самы удобным считаю сохранять данные в табличном виде, что-то типа:
номер ветви| номер ее владельца| текст | Data.Sting| Data.Int |

Благо при использовании TreeView не обязателен рекурсивный обход ветвей можно взять так:

For i:=0 to TreeView.Items.Count-1 do
begin
//Save TreeView.Items[i]
....
end;


Ну загрузка по аналогии.


 
N!tro ©   (2005-07-23 15:52) [4]


> обязательно нужно сохранять еще и данные о том какая ветвь
> владеет этой ветвью

Что-то не понял.
Делаю так:
procedure TfmMain.FormCreate(Sender: TObject);
var
 p: PMyRec;
 f: TStringList;
 i: Integer;
begin
 tvArticle.FullExpand;
 f := TStringList.Create();
//здесь хранятся строки
 f.LoadFromFile(ExtractFilePath(ParamStr(0)) + "Path.txt");
 for i := 0 to tvArticle.Items.Count - 1 do
 begin
   New(p);
   P^.path := f.Strings[i];
   P^.id := i; //абсолютный номер элемента
   tvArticle.Items.Item[i].Data := p;
 end;
 f.Free;
end;

Просто светить "Path.txt" не хочется (он пока в незашифрованном виде хранится)


 
N!tro ©   (2005-07-23 16:01) [5]

type
 PMyRec = ^TMyRec;
 TMyRec = record
   Path: string;
   id: Integer;
 end;


 
Vir ©   (2005-07-23 16:16) [6]

Ну вбощем верно, тока так у тебя получиться два файла в одном ветви в дугом data к ним - если тебе так удобно...
Кстати tvArticle.FullExpand; можешь не делать, от этого порядок ветвей не меняться.


 
N!tro ©   (2005-07-23 16:26) [7]


> tvArticle.FullExpand;

Это дерево разворачивает. Такая задумка



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.062 c
4-1118750333
Константин_1558
2005-06-14 15:58
2005.08.14
Нужно открыть в проводнике диск CDRom а. Прошу помощи!


3-1120574962
_dimka
2005-07-05 18:49
2005.08.14
Можно ли в MSSQL в ХП в качестве параметра передать имя таблицы?


14-1121873134
drakoga
2005-07-20 19:25
2005.08.14
Где в Делфи7 компонент NMSMTP


1-1122372361
serjufa
2005-07-26 14:06
2005.08.14
ак программно из D5 заставить на листе Excel отобразиться сетке


14-1122212775
SoftX
2005-07-24 17:46
2005.08.14
Чего хочет программист от своей профессии?