Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

Сохранение пользовательских настроек   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.044 c
15-1140781534
Сатир
2006-02-24 14:45
2006.03.19
Подавление сообщений Excel


4-1135173992
volser
2005-12-21 17:06
2006.03.19
ListView как на десктопе


1-1139908647
Alextp
2006-02-14 12:17
2006.03.19
Видимость элемента в ListView


15-1140878394
Ega23
2006-02-25 17:39
2006.03.19
С Днём рождения! 24 февраля


2-1141559590
Der Nechk@ssoff
2006-03-05 14:53
2006.03.19
подобно Memo