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

Вниз

Настройки в программе   Найти похожие ветки 

 
денис_м   (2008-07-30 13:08) [0]

У меня в программе есть форма с настройками, там достаточно много: 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
     ...


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


 
KilkennyCat ©   (2008-07-30 13:11) [1]


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

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


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

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


 
AlexanderMS ©   (2008-07-30 13:15) [3]

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

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

    ...


 
AlexanderMS ©   (2008-07-30 13:18) [4]

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

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


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


 
KilkennyCat ©   (2008-07-30 13:20) [5]


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


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


 
brother ©   (2008-07-30 13:21) [6]

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

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


 
Anatoly Podgoretsky ©   (2008-07-30 13:25) [7]

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

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


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

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

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


 
KilkennyCat ©   (2008-07-30 14:06) [9]


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

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


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

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


 
brother ©   (2008-07-30 14:16) [11]

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

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


 
Ega23 ©   (2008-07-30 14:25) [12]

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


 
brother ©   (2008-07-30 14:25) [13]

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

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


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

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

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


 
KilkennyCat ©   (2008-07-30 14:36) [15]

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


 
Anatoly Podgoretsky ©   (2008-07-30 14:44) [16]

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

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


 
brother ©   (2008-07-30 14:45) [17]

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

Махмуд?


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

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

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


 
Ega23 ©   (2008-07-30 15:50) [19]

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


 
zorik ©   (2008-07-30 16:12) [20]

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



Страницы: 1 вся ветка

Текущий архив: 2008.09.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
2-1217313439
Ilg
2008-07-29 10:37
2008.09.07
Удаление папки, содержащей БД


15-1215752865
Vlad Oshin
2008-07-11 09:07
2008.09.07
Задачка с подвохом, ибо пятница. Гарднера


4-1196072040
mabia
2007-11-26 13:14
2008.09.07
Доступ к папке


15-1216364300
shlst
2008-07-18 10:58
2008.09.07
Касперски против Intel!


15-1216302439
Zhekson
2008-07-17 17:47
2008.09.07
Как на листах А4 посегментно распечатать большое изображение?