Форум: "Основная";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
ВнизПроблема сохранения в файл Найти похожие ветки
← →
RaZEr_ (2002-05-15 19:49) [0]Есть запись, к примеру:
type
TMyRec = record
Btn: TTabSheet;
Enabled: Boolean;
end;
Нужно ее сохранить а потом загрузить, так чтобы Button на форме сохранился а потом появился после загрузки .
var
MyFile: file of TMyRec;
...
// Запись
procedure save(Ext: TMyRec);
begin
AssignFile(MyFile,"save.dat");
ReWrite(MyFile);
Seek(MyFile,FileSize(MyFile));
Write(MyFile,Ext);
CloseFile(MyFile);
end;
// Чтение
procedure load;
var
Test: TMyRec;
begin
AssignFile(MyFile,"save.dat");
ReSet(MyFile);
WHILE not eof(MyFile) DO Read(MyFile,Test);
CloseFile(MyFile);
end;
PS: При сохранении в файле подозрительно мало информации (~ на 20 кнопок около 100 байт) . А при загрузке вылетает Access Violation (Если смотреть дамп, в адресах памяти ничего не записано) .
← →
Song (2002-05-15 23:26) [1]А с какой целью употреблён Seek() ?
← →
Malder (2002-05-15 23:47) [2]Угу. ВО первых, непонятно зачем Seek.
Во вторых, на 20 кнопок около 100 байт - э-э-э, а где там массив кнопок храниться ?
← →
Anatoly Podgoretsky (2002-05-16 00:04) [3]SizeOf(TMyRec)*20 ~100 байт. все в порядке
← →
RaZEr (2002-05-16 05:55) [4]Я упростил код, а seek убрать забыл . Ну это тут не принципиально . Да и массив у меня не кнопок а куда сложнее . У меня эта запись состоит из пяти компонентов, а на 6 элементов этой записи пришлось 120 байт . Тут даже и споров быть не может что ничего толком не сохранилось :(
Если этот метод применять к записи состоящей из всяких string"ов, integer"ов ,- то все работает .
Может что с распределением памяти, ведь у меня вместо Ext :
MyArray: array [1..100] of TMyRec;
PS: А вообще можно так сохранять компоненты ? И если нет, то как лучше всего сохранить такую запись (TMyRec) .
← →
MBo (2002-05-16 07:12) [5]работая таким образом с записями, содержащими объекты, длинные строки или динамические массивы, ты записываешь не сам объект, а УКАЗАТЕЛЬ на него, что смысла не имеет. Занимает он 4 байта, вот тебе и 100 получается. Писать такие поля надо руками, но вот что ты имеешь в виду под сохранением Tabsheet, можно только догадываться. Смотри в сторону Stream, для объектов - SaveToStream
← →
RaZEr (2002-05-18 05:17) [6]Да я так и думал по началу делать . Но у меня запись с объектами . Получается что мне прийдется сохранять каждый из объектов отдельно ?!
← →
MBo (2002-05-18 07:54) [7]можно и в один файл. Принцип такой - пишешь в TFileStream обыкновенные поля, а объекты сначала Savetostream(Memorystream),
а потом пишешь в filestream длину memorystream, и memorystream.position:=0 и filestream.copyfrom(memorystream)
← →
RaZEr (2002-05-19 07:44) [8]Это я в курсе, я про то, что писанины будет на килобайты чтобы сохранить из записи каждый объект отдельно, а потом считать . Мне же не все свойства нужны, а только некоторые . Поэтому я подумал что лучше будет сохранять именно те свойства, которые мне нужно . Я просто думал, что прокатит если я record сохранять буду .
← →
Anatoly Podgoretsky (2002-05-19 10:38) [9]Подход нормальный, если будешь сохранять свойства, а не уазатели, например если ты хочешь сохранять шрифт и положение чего то, то опиши запись примерно так
TMyRec = record
BtnX: Integer;
BtnY: Integer;
BtnFontName: ShortString;
BtnFontColor: Integer;
BtnFontSize: Integer;
...
end;
Но с другой стороны, нахрен в этом случае записи, не лучше ли будет использоват INI файл
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c