Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.025 c
2-1141548073
Der Neck@ssoff
2006-03-05 11:41
2006.03.19
открытие файла своей прогой


5-1127730027
DimaBr
2005-09-26 14:20
2006.03.19
Пункт меню редактора компонента 2


2-1141368783
WChek
2006-03-03 09:53
2006.03.19
прием параметров из командной строки


4-1135243373
bobah
2005-12-22 12:22
2006.03.19
Прерывание процесса установки модемного соединения.


15-1140616689
Silica
2006-02-22 16:58
2006.03.19
Документация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский