Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 10:29   #1
Fellics{новичок}
Форумчанин
 
Аватар для Fellics{новичок}
 
Регистрация: 25.03.2008
Сообщений: 159
По умолчанию Сохранение структуры в файл

Всем доброго времени суток... у меня существует структура которую нужно сохранить в файл, а затем и загрузить из файла, однако чего то не получается, код далее:
Код:
type
 pic = record
        x, y, width, height : integer;
        image : tbitmap;
        visible : boolean;
       end;

var   tpict:array of pic;

//процедура сохранения
procedure TForm1.ToolButton3Click(Sender: TObject);
var  filehandle,i:integer;
f: file of pic;
begin


if Saveqst.Execute then
begin
if extractfileext(saveqst.FileName)<>'.qst' then Saveqst.filename:=Saveqst.filename+'.qst';

assignfile(f,saveqst.FileName);
rewrite(f);
write(f, tpict[0]);
closefile(f);

end;
end;

//процедура загрузки
procedure TForm1.N7Click(Sender: TObject);
var i:integer;
f:file of pic;
c:pic;
begin
i:=0;
if opendialog1.Execute then
begin
assignfile(f,opendialog1.FileName );
reset(F);
read(f, c);
tpict[0]:=c;
closefile(f);

end;

end;
Прошу помощи, заранее благодарен всем откликнувшимся=)

P.S. Код даю кусками, так так вся программа порядка четырехсот строк, ну и затруднение в только в данных процедурах

Последний раз редактировалось Fellics{новичок}; 31.10.2011 в 10:45.
Fellics{новичок} вне форума Ответить с цитированием
Старый 31.10.2011, 10:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
image : tbitmap;
Сохранится только указатель.
Мой совет - храни эту информацию в базах данных.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.10.2011, 10:53   #3
Fellics{новичок}
Форумчанин
 
Аватар для Fellics{новичок}
 
Регистрация: 25.03.2008
Сообщений: 159
По умолчанию

а можно как нибудь сохранить само изображение в файл с остальными данными? просто будет довольно проблемно держать картинку отдельно, а с файлом я считаю в моем случае будет проще, базу данных тоже использовать не хотелось бы...
Fellics{новичок} вне форума Ответить с цитированием
Старый 31.10.2011, 11:32   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

УПС. проглядел...
Цитата:
Код:
image : tbitmap;
Сохранится только указатель.
Полностью согласен!!!
и ещё есть парочка проблем.
1) я бы размер динамического массива ОБЯЗАТЕЛЬНО устанавливал принудительно (см. ниже)
2) перед чтением из файла я бы обязательно проверял, что файл не пуст!
примерно так:
Код:
//процедура загрузки
procedure TForm1.N7Click(Sender: TObject);
var f: file of pic;
begin
  i := 0;
  if opendialog1.Execute then
  begin
    assignfile(f, opendialog1.FileName);
    try
      reset(f);
      if FileSize(f)>0 then begin
        SetLength(tpict, 1);
        read(f, tpict[0]);
      end;
    finally
      closefile(f);
    end;
  end;
end;
p.s. впрочем, это всё неважно. ибо Stilet прав. так изображение не сохранишь!

Последний раз редактировалось mihali4; 02.11.2011 в 01:27.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2011, 11:43   #5
Fellics{новичок}
Форумчанин
 
Аватар для Fellics{новичок}
 
Регистрация: 25.03.2008
Сообщений: 159
По умолчанию

Ну вопрос то другой остается в силе, каким методом можно сохранить тогда изображение с остальными данными?
Fellics{новичок} вне форума Ответить с цитированием
Старый 31.10.2011, 11:49   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Выгрузите изображение в Stream, в конец допишите доп.инфу и в файл. Прочитайте файл в Stream, заберите с конца доп.инфу, обрежте Stream и загрузите из него картинку. Проще не придумать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.10.2011, 13:51   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

http://www.gunsmoker.ru/2011/10/pascal.html
Цитата:
Типизированный файл - это очень простая БД в виде "array of что-то". Причём, "что-то" должно иметь фиксированный размер в байтах, поэтому строки, динамические массивы и другие данные переменного размера в типизированных файлах хранить нельзя.
Как уже выше указали - проще всего сделать это на базе TFileStream.
Но можно и на паскалевских файлах, если брать нетипизированные файлы.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось mihali4; 02.11.2011 в 01:27.
GunSmoker вне форума Ответить с цитированием
Старый 31.10.2011, 15:02   #8
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

TPersistence - никак? А изображения - придумать массив байт или в строку.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 31.10.2011, 15:05   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Выгрузите изображение в Stream, в конец допишите доп.инфу и в файл. Прочитайте файл в Stream, заберите с конца доп.инфу, обрежте Stream и загрузите из него картинку. Проще не придумать
даже еще проще, TBitmap.LoadFromStream грузит только то что нужно, и не более.
http://programmersforum.ru/showthrea...651#post335651
вот малый пример текста и битмапа в одном файле.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.10.2011, 15:26   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
базу данных тоже использовать не хотелось бы...
Мазохист ты, батенька
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение всей структуры массива в строку J-Max PHP 5 05.09.2010 18:00
сохранение/чтение структуры с файла Vorname Общие вопросы C/C++ 4 10.11.2009 17:59
сохранение структуры TreeView SergGhost Помощь студентам 6 27.05.2009 18:31
Сохранение в файл сложной динамической структуры _Инженер_ Общие вопросы Delphi 24 20.10.2008 09:38
сохранение структуры (динамические списки очередей) в файле AlenaZ Помощь студентам 2 09.06.2008 20:14