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

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

Настройки в программе [D7]


денис_м ©   (2008-07-30 13:08:00) 

У меня в программе есть форма с настройками, там достаточно много: TEdit, TUpDown, TTrackBar, TCheckBox, TRadioButton. Сами настройки я храню в отдельном xml-файле, при этом а программе есть:
TSettings = record
 AutoLoadFileCheckBox: Boolean;
 ...
end;

В которую я записываю и из которой считываю информацию во время открытия / закрытия окна настроек. Но мне надоело это порядком уже, при добавлении нового в настройки приходиться добавлять в record, в процедуры название.

Я решил все это автоматизировать. А именно циклом SettingsForm.Components[i]...выбирать нужный класс из окна настроек и записывать для него данные. Но вот куда записывать их во время работы программы?

Еще раз: (код просто для наглядности, на case не смотрите)
with SettingsForm do
 for i := 0 to ComponentsCount - 1 do
  case Components[i].ClassName of
     TEdit: соранить text
     TCheckBox: сохранить checked
     ...


куда это все записывать? в массив? (сразу записывать и считывать в файл не годиться) как лучше сделать?


zorik   (2008-07-30 16:12:00) [1]

Я, например, создаю простенький клас со свойствами и с методами LoadFromFile SaveToFile. При запуске программы считываю настройке, в ходе работы меняю. Причем они могут менятся не только после нажатия на "ок" в диалоговом окне параметров, а и, например, при изменении размеров и положений форм и т.д. При закрытии проги все сохраняю.


Ega23   (2008-07-30 15:50:00) [2]

А если серьёзно, то без разницы, в каком виде и как эти параметры хранятся. Один раз загружаются при старте, один раз сохраняются при выходе. Обязателен метод ParamByName и функции AsString AsInteger и т.п.
А как оно там потом храниться будет - да наплевать слюной. Хоть в ini, хоть в xml, хоть в БД, хоть в зашифрованном через RSA бинарнике.


Медвежонок Пятачок   (2008-07-30 14:46:00) [3]

Про реестр поговорим? :)

О покойниках только хорошее.


brother   (2008-07-30 14:45:00) [4]

> Мустафаподжигай!

Махмуд?


Anatoly Podgoretsky   (2008-07-30 14:44:00) [5]

> KilkennyCat  (30.07.2008 14:36:15)  [15]

Мустафа поджигай!


KilkennyCat   (2008-07-30 14:36:00) [6]

Про реестр поговорим? :)


Медвежонок Пятачок   (2008-07-30 14:29:00) [7]

ini-файлы рулят!!!

рулят, только не в ту сторону.


brother   (2008-07-30 14:25:00) [8]

> ini-файлы рулят!!!

начинается..... ;)


Ega23   (2008-07-30 14:25:00) [9]

ini-файлы рулят!!!


brother   (2008-07-30 14:16:00) [10]

> То есть дозаписывать все-равно придется, а?

Или переписывать, как захочешь, но придется ;) Иначе как ты последнее состояние отследишь?


Медвежонок Пятачок   (2008-07-30 14:13:00) [11]

структура в памяти-то тебе зачем?
xml документ сам по себе структура.


KilkennyCat   (2008-07-30 14:06:00) [12]


> brother ©   (30.07.08 13:21) [6]

То есть дозаписывать все-равно придется, а?
Тем более, что открытия / закрытия окна настроекпозволяет это делать очень удобно.
Что касается их хранения в каком-то дополнительном массиве, то это, возможно и излишне, если данное окно настроек создается с запуском программы и живет все ее время жизни. Можно ведь обращаться и напрямую к нему. В противном случае, если идет борьба за ресурсы, я бы посчитал тогда нагрузку по обращению именно к файлу, ибо никакого геморроя в этом не вижу, особенно при наличии структуры.


brother   (2008-07-30 13:26:00) [13]

> там где часики.

он хот уже "запузырил" - респект! )


Anatoly Podgoretsky   (2008-07-30 13:25:00) [14]

> денис_м  (30.07.2008 13:14:02)  [2]

Ух ты у тебя и иконка есть там где часики.


brother   (2008-07-30 13:21:00) [15]

> если електроны в розетке кончатся,

те? ты считал настройки и используй их, если есть изменения, дозаписывай, и снова в памяти держи...
зы тока не говори что электроны могут кончится во время перезаписи... это уже не к нам)


KilkennyCat   (2008-07-30 13:20:00) [16]


> денис_м   (30.07.08 13:14) [2]
> Ну мне в любом случае во время работы программы нужно иметь
> доступ к настройкам. Не буду же я каждый раз когда мне требуется
> только лишь узнать свернуть ли окно в панель задач или в
> трей - открывать файл искать там настройку и считывать ее.
>  Лучше сразу все эти настройки хранить в памяти.


И сразу все потерять, если електроны в розетке кончатся, а бесперебойника нету?


AlexanderMS   (2008-07-30 13:18:00) [17]

Я не до конца прочитал вопрос... :)
Ну в общем можно создать одну record:

TSettings = record
 TextData : string;
 CheckboxChecked : Boolean;
...
end;


а потом обращаться к Settings : TSettings;


AlexanderMS   (2008-07-30 13:15:00) [18]

Например, так:

with SettingsForm do
for i := 0 to ComponentsCount - 1 do
 if Components[i].ClassName = 'TEdit'
  then СохранитьТекст( TEdit(Components[i]).Text)

    ...


денис_м   (2008-07-30 13:14:00) [19]

Ну мне в любом случае во время работы программы нужно иметь доступ к настройкам. Не буду же я каждый раз когда мне требуется только лишь узнать свернуть ли окно в панель задач или в трей - открывать файл искать там настройку и считывать ее. Лучше сразу все эти настройки хранить в памяти.


KilkennyCat   (2008-07-30 13:11:00) [20]


> сразу записывать и считывать в файл не годиться

сразу всезаписывать и считывать в файл годиться. при нажатии какой-нить кнопки "применить" или как ее там...


Наверх

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