Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизСохранение пользовательских настроек Найти похожие ветки
← →
Maverick © (2006-02-13 11:28) [0]Привет, Мастера! тема в принципе избитая, но вот один момент не знаю как сделать...делаю так:
const
FileName = "file.dat";
constructor TForm1.Create(AOwner: TComponent);
begin
if FileExists(FileName) then
begin
CreateNew(AOwner);
ReadComponentResFile(FileName, Self);
end
else
inherited Create(AOwner);
{ поместите здесь код в стиле "OnCreate" }
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
WriteComponentResFile(FileName, Self);
end;
но что делать если файл file.dat был поврежден? в этом случае
ReadComponentResFile выдаст ошибку, как можно корректно создать форму?
← →
Ormada © (2006-02-13 11:31) [1]если файла нету то создавай форму "по умолчанию"(возможно это будет просто пустая форма, возможно с какими то конторлами), но такой подход более правильный
← →
Ormada © (2006-02-13 11:32) [2]к тому же ты сохраняешь не настройки а КОМПОНЕНТ ПОЛНОСТЬЮ
оно тебе надо ?
лучше сохраняй только НЕКОТОРЫЕ (кот сам сочтёшь нужными) параметры компонентов или ещё чего, для этого лучше Ini файлы юзать.....
← →
Maverick © (2006-02-13 11:35) [3]настроек слишком много получится :)
проще сохранить компонент..
>Ormada © (13.02.06 11:31) [1]
>если файла нету то создавай форму "по умолчанию"(возможно это будет >просто пустая форма, возможно с какими то конторлами), но такой подход >более правильный
файл то как раз есть, но там данные кривые, собсно в этом вся проблема у меня
← →
Maverick © (2006-02-13 17:32) [4]мож у кого какие-нибудь идеи еще есть ? :)
← →
azl © (2006-02-13 17:51) [5]Лучший способ - ini-файлы. Но можно использовать библиотеку RxLibrary. Компонент - FormStorage (Placement)
← →
Maverick © (2006-02-13 17:55) [6]> azl © (13.02.06 17:51) [5]
вопрос собсно у меня в другом...сохренение компонента- как вариант мне нравится, может это не очень красиво..
как анулировать действие CreateNew(AOwner) при появлении ошибки при ReadComponentResFile для того чтобы можно было спокойно сделать inherited Create(AOwner)?
← →
Дмитрий Белькевич © (2006-02-13 21:31) [7]Переделать всю логику сохранения. Лучше всего пользовать сторонние компоненты для сохранения форм/компонентов их jedi, rx или eh библиотек.
← →
Ormada © (2006-02-14 06:59) [8]2 Maverick исчо раз...
если какие то данные кривые - заменяй их данными по умолчанию
например не смог загрузиться такой то компонент
следовательно создаёшь сам компонент такого класса с определёнными тобой значениями по умолчанию
и вопрос в том юзать или не юзать сторонние компоенты тут совершенно не при чём-бред, одно из другого не вытекает
как хранить - другой вопрос
← →
Ormada © (2006-02-14 07:03) [9]если уж вопрос в том как задавить то
CreateNew(AOwner);
try
ReadComponentResFile(FileName, Self);
except
блок в случае неудачи загрузки
end;
← →
Leonid Troyanovsky © (2006-02-14 08:30) [10]
> Maverick © (13.02.06 17:55) [6]
> как анулировать действие CreateNew(AOwner) при появлении
> ошибки при ReadComponentResFile для того чтобы можно было
> спокойно сделать inherited Create(AOwner)?
При возникновении ошибок при ReadComponentResFile удалить файл,
а в тексте исключения попросить юзера запустить программу повторно.
В любом случае, имя dfm файла не должно быть в коде, а, например,
передаваться в комстроке.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-02-14 08:50) [11]
> Ormada © (14.02.06 07:03) [9]
> CreateNew(AOwner);
> try
> ReadComponentResFile(FileName, Self);
> except
> блок в случае неудачи загрузки
> end;
Если на то уж пошло, то защищать нужно Application.CreateForm, т.е.,
пусть filename : String = "file.dat" - глобальная переменная в Unit1,
тогда пишем в тексте Project1.dpr:
Application.Initialize;
try
Application.CreateForm(TForm1, Form1);
except
filename := "";
Application.CreateForm(TForm1, Form1); // пытаемся создать повторно
end;
Application.Run;
--
Regards, LVT.
← →
atruhin © (2006-02-14 14:40) [12]А почему он должен быть поврежден? Ведь с таким же успехом может быть поврежден exe файл, БД и т.д. Поврежден выдавай сообщение и закрывай программу.
← →
Maverick © (2006-02-14 16:51) [13]>Leonid Troyanovsky © (14.02.06 08:30) [10]
&
>atruhin © (14.02.06 14:40) [12]
в данный момент так и делаю, просто я вот еще думал нормально так делать или нет :)
ну ок, всем спасибо за ответы :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c