Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-97140
И.Коган
2002-05-06 17:47
2002.05.30
задача (на SQL)


1-97329
Demon Ltd
2002-05-18 00:57
2002.05.30
Копирование файла по выбору


14-97414
esu
2002-04-22 16:56
2002.05.30
Задачка мастерам от новичка :)


1-97316
Doctor Deejay
2002-05-19 18:24
2002.05.30
Ну помогите же мне кто-то!!!


4-97449
SMike
2002-03-27 20:28
2002.05.30
RichEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский