Текущий архив: 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.46 MB
Время: 0.011 c