![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение пользовательских настроек [D7, WinXP]
Maverick © (2006-02-13 11:28:00)Привет, Мастера! тема в принципе избитая, но вот один момент не знаю как сделать...делаю так:
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 выдаст ошибку, как можно корректно создать форму?
Maverick (2006-02-14 16:51:00) [1]>Leonid Troyanovsky © (14.02.06 08:30) [10]
&
>atruhin © (14.02.06 14:40) [12]
в данный момент так и делаю, просто я вот еще думал нормально так делать или нет :)
ну ок, всем спасибо за ответы :)
atruhin (2006-02-14 14:40:00) [2]А почему он должен быть поврежден? Ведь с таким же успехом может быть поврежден exe файл, БД и т.д. Поврежден выдавай сообщение и закрывай программу.
Leonid Troyanovsky (2006-02-14 08:50:00) [3]
> 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.
Leonid Troyanovsky (2006-02-14 08:30:00) [4]
> Maverick © (13.02.06 17:55) [6]
> как анулировать действие CreateNew(AOwner) при появлении
> ошибки при ReadComponentResFile для того чтобы можно было
> спокойно сделать inherited Create(AOwner)?
При возникновении ошибок при ReadComponentResFile удалить файл,
а в тексте исключения попросить юзера запустить программу повторно.
В любом случае, имя dfm файла не должно быть в коде, а, например,
передаваться в комстроке.
--
Regards, LVT.
Ormada (2006-02-14 07:03:00) [5]если уж вопрос в том как задавить то
CreateNew(AOwner);
try
ReadComponentResFile(FileName, Self);
except
блок в случае неудачи загрузки
end;
Ormada (2006-02-14 06:59:00) [6]2 Maverick исчо раз...
если какие то данные кривые - заменяй их данными по умолчанию
например не смог загрузиться такой то компонент
следовательно создаёшь сам компонент такого класса с определёнными тобой значениями по умолчанию
и вопрос в том юзать или не юзать сторонние компоенты тут совершенно не при чём-бред, одно из другого не вытекает
как хранить - другой вопрос
Дмитрий Белькевич (2006-02-13 21:31:00) [7]Переделать всю логику сохранения. Лучше всего пользовать сторонние компоненты для сохранения форм/компонентов их jedi, rx или eh библиотек.
Maverick (2006-02-13 17:55:00) [8]> azl © (13.02.06 17:51) [5]
вопрос собсно у меня в другом...сохренение компонента- как вариант мне нравится, может это не очень красиво..
как анулировать действие CreateNew(AOwner) при появлении ошибки при ReadComponentResFile для того чтобы можно было спокойно сделать inherited Create(AOwner)?
azl (2006-02-13 17:51:00) [9]Лучший способ - ini-файлы. Но можно использовать библиотеку RxLibrary. Компонент - FormStorage (Placement)
Maverick (2006-02-13 17:32:00) [10]мож у кого какие-нибудь идеи еще есть ? :)
Maverick (2006-02-13 11:35:00) [11]настроек слишком много получится :)
проще сохранить компонент..
>Ormada © (13.02.06 11:31) [1]
>если файла нету то создавай форму "по умолчанию"(возможно это будет >просто пустая форма, возможно с какими то конторлами), но такой подход >более правильный
файл то как раз есть, но там данные кривые, собсно в этом вся проблема у меня
Ormada (2006-02-13 11:32:00) [12]к тому же ты сохраняешь не настройки а КОМПОНЕНТ ПОЛНОСТЬЮ
оно тебе надо ?
лучше сохраняй только НЕКОТОРЫЕ (кот сам сочтёшь нужными) параметры компонентов или ещё чего, для этого лучше Ini файлы юзать.....
Ormada (2006-02-13 11:31:00) [13]если файла нету то создавай форму "по умолчанию"(возможно это будет просто пустая форма, возможно с какими то конторлами), но такой подход более правильный