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

Вниз

Запись динамического массива в файл   Найти похожие ветки 

 
Злой!!!   (2002-08-30 12:15) [0]

Господа мастера! Подскажите как записать динамический массив объектов в файл, а то у меня вместо значений, в файл записываются указатели. Я объявляю:

smeta: array of TSmeta;
smFile: file of TSmeta;


TSmeta - это класс. При записи пишу:

for i:=0 to High(Smeta) do
begin
write(smFile,smeta[i]);
end;


Спасибо.


 
Smithson ©   (2002-08-30 12:25) [1]

Попробуй, когда открываешь файл - Reset(smFile, [b]1[/b]);


 
Виктор Щербаков ©   (2002-08-30 12:30) [2]

Smithson © (30.08.02 12:25)
Дело не в этом. array of TSmeta - это массив указателей на экземпляры класса TSmeta.


 
Skier ©   (2002-08-30 12:32) [3]

>Злой!!!
Я так понял что тебе нужно записать свойства
объектов в файл. Для этого ты сначала посмотри, как
в Delphi организованы классы TReader и TWriter - очень
поучительно, знаешь ли...


 
Opuhshii ©   (2002-08-30 12:46) [4]

мда,.. ну и что?,..

Pointer types—whether implicit or explicit—are not allowed, so a file cannot contain dynamic arrays, long strings, classes, objects, pointers, variants, other files, or structured types that contain any of these.

тут я вижу два варианта,. либо ваша TSmeta = class(TComponent)..,
там есть imho SaveToStream для published (D6 под рукой нет,.. но такое кажеться было,... !!! (не факт)),,.
либо... либо ручками,..



 
Iliaser   (2002-08-30 12:47) [5]


write(smFile,smeta[i]);


Записывает в файл кусок памяти расположенный по адресу
@smeta[i] размером в sizeof(TSmeta) байт. Следовательно
если в структуре у тебя есть поле указатель на что либо
то в файл будет записано значение этого указателя а не
данные на которые этот указатель указывает.


 
PVOzerski ©   (2002-08-30 13:57) [6]

либо переделать tSmeta из class в object, взять из OWL от BP tFileStream, подправить его для 32-разрядности (предупреждаю: работа огромная) и работать через него, либо писать тем или иным способом интересующие вас поля отдельно. Во 2-м случае могу порекомендовать собрать эти поля (для property это не подойдет) в одно поле-record. А еще в модуле Classes есть функции ReadComponentResFile и WriteComponentResFile для классов-наследников tComponent. Я их не пробовал, но предполагаю, что если tSmeta сделать компонентом, то они могут оказаться тем, что надо.


 
Skier ©   (2002-08-30 14:01) [7]

>PVOzerski

> что если tSmeta сделать компонентом

А это зачем ?


 
PVOzerski ©   (2002-08-30 15:33) [8]

>> что если tSmeta сделать компонентом
Да просто Help почитал, а там описалово на функции такое:
WriteComponentResFile procedure
Writes components and their properties to a file using a Windows resource file format.
procedure WriteComponentResFile(const FileName: string; Instance: TComponent);
ReadComponentResFile function
Reads components and their properties from a specified Windows resource file.
function ReadComponentResFile(const FileName: string; Instance: TComponent): TComponent;

Вроде бы то, что надо, но параметр Instance должен быть совместим с tComponent. Из чего совершенно не следует, что его надо инсталлировать, регистрировать и т.п.


 
Skier ©   (2002-08-30 15:40) [9]

>PVOzerski
Ага. Значит я тебя не понял я то думал что ты
под фразой "tSmeta сделать компонентом" имел ввиду как раз
инсталлирование, регистрирацию и т.п.

IMHO, автору вопроса нужно сделать свою tSmeta потомком tComponent и опубликовать необходимые свойства. И будет ему счастье :))



 
Злой!!!   (2002-08-30 16:20) [10]

Всем, спасибо, работает - по совету Opuhshii записываю свойства ручками... К сожалению остальные способы мне пока непонятны :(



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
1-35690
Mufta
2002-09-01 15:45
2002.09.12
Как сделать так?


1-35670
lipskiy
2002-09-01 18:02
2002.09.12
Как получить цвет точки компонента-родителся под моим компонентом


3-35564
mas_alexey
2002-08-21 19:11
2002.09.12
Триггер в ISQL


4-35946
Пастор
2002-07-21 14:57
2002.09.12
Как убрать кнопку проги с панели задач на АРI ?


1-35711
@Ujin
2002-08-30 12:58
2002.09.12
Знаю - достал... Но как программно создать ярлык???