Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
ВнизTFileStream. Горю! Найти похожие ветки
← →
Fredericco (2002-11-19 17:52) [0]Народ помогите пожалуйста.
TDoIt=Class(TCollectionItem)
private
FZone:string;
FLevel:byte;
FDelay:string;
published
property Zone : string read FZone write FZone;
property Level : byte read FLevel write FLevel;
property Delay : string read FDelay write FDelay;
end;
TDoItC=Class(TCollection)
protected
function GetDoIt(Index: Integer): TDoIt;
procedure SetDoIt(Index: Integer; Value: TDoIt);
public
function Add: TDoIt;
property Items[Index: Integer]: TDoIt read GetDoIt write SetDoIt; default;
end;
TActions=Class(TCollectionItem)
private
FDoIt:TDoItC;
FSTime:cardinal;
published
property STime : cardinal read FSTime write FSTime;
property DoIt:TDoItC read FDoIt write FDoIt;
end;
TActionsC=class(TCollection)
protected
function GetAct(Index: Integer): TActions;
procedure SetAct(Index: Integer; Value: TActions);
public
function Add: TActions;
property Items[Index: Integer]: TActions read GetAct write SetAct; default;
end;
TLigthScenario=class(TCollectionItem)
private
FName:string;
FLastTime:integer;
FActions:TActionsC;
published
property Name:string read FName write FName;
property LastTime:integer read FLastTime write FLastTime default 0;
property Actions:TActionsC read FActions write FACtions;
end;
TLigthScenarioC=class(TCollection)
protected
function GetLS(Index: Integer): TLigthScenario;
procedure SetLS(Index: Integer; Value: TLigthScenario);
public
function Add: TLigthScenario;
property Items[Index: Integer]: TLigthScenario read GetLS write SetLS; default;
end;
TLiSc=class(TComponent)
protected
FLigthScenario:TLigthScenarioC;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property LigthScenario:TLigthScenarioC read FLigthScenario write FLigthScenario;
end;
...
var
ls;TLiSc;
FS:TFileStream;
далее
FS.WriteComponent(ls);
все ок. Проверяю в файл все, что надо записал.
FS.ReadComponent(LS);
Акцес виолятион!
Заранее благодарен!
Fredericco.
← →
KA_ (2002-11-19 18:06) [1]Попробуй так
LS := FS.ReadComponent(nil);
← →
KA_ (2002-11-19 18:08) [2]Прошу прощения
LS := FS.ReadComponent(LS);
← →
Fredericco (2002-11-19 18:13) [3]Сначала пишет что типы не совместимы TLiSc и TComponent.
Создал tmp:TComponent. tmp:=FS.ReadComponent(nil); Пишет что класс TLiSc не найден - ошибка. :-(
← →
Fredericco (2002-11-19 18:15) [4]KA_ (19.11.02 18:08)
пишет что типы не совместимы TLiSc и TComponent
← →
KA_ (2002-11-19 18:16) [5]Я уж совсем сильно ПРОШУ ПРОЩЕНИЯ. Попробывал - получилось вот так:
ls := TLiSc(fs.ReadComponent(ls));
Перед этим ls должен быть создан криэйтом.
Иначе заругается, что класс нот фаунд.
← →
Fredericco (2002-11-19 18:18) [6]Я не в обиде :-)
Опять ошибка. А ты пустой класс сохранял? Если да, то попробуй в него чего-нить записать а потом сохранить и открыть.
← →
KA_ (2002-11-19 18:30) [7]Да сохранял пустой класс. Нужен исходник, сам я так быстро не наваяю всю имплементацию :) Ты уж извини.
← →
Fredericco (2002-11-19 18:33) [8]ls:=TLiSc.Create(nil);
ls.LigthScenario.Add;
ls.LigthScenario[ls.LigthScenario.Count-1].Name:="Test Name";
← →
KA_ (2002-11-19 18:38) [9]Нет, не это. Тело TLigthScenarioC.Add, TLigthScenarioC.SetLS и GetLS.
← →
Fredericco (2002-11-19 18:39) [10]Понятно. :-( Мне тут сказали, что FileStream не может сохранять более одного уровня. Правда?
← →
KA_ (2002-11-19 18:46) [11]Очевидно да. НО! Можно приписать к компоненту метод SaveToFile, SaveToStream или Serialize. И в нем сохранять состояние объекта, то есть компонента. На королевстве делфи есть статья про сериализацию классов делфи и там по-моему (не помню точно) есть и исходники компоненты для сериализации в XML файле. Принцип один и тотже, пропустишь муть про всякие парсеры, и напишешь етот самй метод. Вот ссылка:
http://www.delphikingdom.com/mastering/xml_ser03.htm
← →
KA_ (2002-11-19 18:47) [12]Опять прошу прощения - не мой сегодня день!
http://www.delphikingdom.com/mastering/xml_ser01.htm
← →
Fredericco (2002-11-19 18:48) [13]Спасибо!
← →
Fredericco (2002-11-25 15:14) [14]Может у кого еще есть мнения по моей проблеме?
← →
Fantasist (2002-11-25 17:32) [15]Я лично, определял методы для каждого класса SaveToStream и LoadFromStream. Потом вызывал эти методы у объекта самого верхнего уровня, а тот уже вызывал их у своих под объектов. В общем то, что и называют сериализацией - простой способ сохранять сложные структуры. Чем мне еще Stream нравиться, так это, что можно его и в файл записать и по сети передать и так в памяти похранить.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c