Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-14665
Silentor
2002-11-18 19:21
2002.12.05
Посоветуйте TimerList


3-14404
Roma111
2002-11-15 10:12
2002.12.05
Ошибка восстановления базы


7-14848
Aric
2002-10-02 21:14
2002.12.05
Глобальный хук на мышку


3-14436
kombat
2002-11-13 18:20
2002.12.05
Какой то непонятный этот Jet


1-14541
tv
2002-11-26 18:03
2002.12.05
Плоский TTreView.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский