Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
денис_м   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
13-1120735770
WondeRu
2005-07-07 15:29
2008.09.07
Релизы SQL Server2005 и Visual Studio2005 анонсировны на 7 ноября


3-1205487538
Bless
2008-03-14 12:38
2008.09.07
ADO 2.8 в MSDN и Delphi 7 - две большие разницы?


2-1217258154
lavgirls
2008-07-28 19:15
2008.09.07
Выравнивание текста


2-1217418829
a.a.j.
2008-07-30 15:53
2008.09.07
Расширенный DBGrid


2-1217350317
Сергей
2008-07-29 20:51
2008.09.07
Как добавить unit из другой программы?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский