Здравствуйте!
Стоит задача реализовать механизм сохранения для приложеньица. Что надо сохранить: дерево из TreeView, несколько StringList'ов.
Сохраняется и читается вот такими процедурами:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | procedure SaveToFile(RootObject: TComponent; const FileName: TFileName);
var
FileStream: TFileStream;
MemStream: TMemoryStream;
begin
FileStream := TFileStream . Create(FileName, fmCreate);
MemStream := TMemoryStream . Create;
try
MemStream . WriteComponent(RootObject);
MemStream . Position := 0 ;
ObjectBinaryToText(MemStream, FileStream);
finally
MemStream . Free;
FileStream . Free;
end ;
end ;
procedure LoadFromFile(RootObject: TComponent; const FileName: TFileName);
var
FileStream: TFileStream;
MemStream: TMemoryStream;
begin
FileStream := TFileStream . Create(FileName, 0 );
MemStream := TMemoryStream . Create;
try
ObjectTextToBinary(FileStream, MemStream);
MemStream . Position := 0 ;
MemStream . ReadComponent(RootObject);
finally
MemStream . Free;
FileStream . Free;
end ;
end ;
|
Суть проблемы: такими процедурами я легко сохраняю и восстанавливаю TreeView
отдельно, просто скармливая его этим функциям
SaveToFile(TreeView1, 'saveTR.txt');. Если открыть полученный файл, то видно, что все недефолтовые свойства TreeView туда записались типа
object TreeView1: TTreeView ... Но надо сохранять и мои StringList, соответсвенно я создаю свой класс (код ниже).
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ProjectData= class (TComponent)
private
<font color="Green">
Tree:TTreeView;
LMeasures:TStringList;
MeasuresCount: Integer ;
public
constructor Create(ProjectData: TComponent); override;
destructor Destroy; override;
published
<font color="Green">
property PartsTree : TTreeView read Tree write Tree;
property Measures: TStringList read LMeasures write LMeasures;
property MCount: Integer read MeasuresCount write MeasuresCount;
end ;
|
Потом присваиваю значения и сохраняю:
Код:
1 2 3 4 5 6 | ProjectData:=TProjectData . Create(self);
ProjectData . PartsTree:=TreeView1;
ProjectData . MCount:=Form5 . ListBox1 . Items . Count;
for I := 0 to Form5 . ListBox1 . Items . Count - 1 do
ProjectData . Measures . Insert(I, Form5 . ListBox1 . Items[i]);
SaveToFile(ProjectData, 'save.txt' );
|
После чего сохраняю. StringList сохраняется со всей нужной информацией, а вот TreeView сохраняется коряво, без информации:
Код:
1 2 3 | object TProjectData
PartsTree = Form1 . TreeView1
...
|
А вот если
PartsTree присвоить тип
TTreeNodes, то информация о структурое моего дерева
PartsTree.NodeData=... сохраняется как надо, но читаться обратно она уже не хочет.
Таким образом, либо как заставить сохраняться TreeView целиком, либо как заставить читаться TTreeNodes?
Спасибо!