Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение пользовательских настроек [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]

если файла нету то создавай форму "по умолчанию"(возможно это будет просто пустая форма, возможно с какими то конторлами), но такой подход более правильный


Наверх

Титульная страница Поиск, карта сайта Написать письмо