Главная страница
    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-97129
N00N
2002-05-06 11:47
2002.05.30
Переиндексация. Как?


1-97266
MystiX
2002-05-15 22:21
2002.05.30
Hook


3-97145
Pavel_S
2002-05-06 16:00
2002.05.30
Проблема с Post


3-97183
СергейКнязев
2002-05-06 16:33
2002.05.30
Почему в W2K размер Memo вроде не ограничен, а в W 98 ограничен


1-97319
OlegBat
2002-05-18 10:05
2002.05.30
Где взять библиотеку RX для Delphi 6 ?





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