0. Предисловие
Доброго всем, чего там у вас! Поговорим немного о программировании, а именно, о сохранении настроек. Когда то давно, когда я только начинал писать более-менее приличный софт, я часто сталкивался с проблемой сохранения настроек — в ходе развития софта появлялись все новые и новые опции и каждый раз приходилось добавлять их в функции сохранения/загрузки, придумывать им имена, мучится над структурой хранения… В общем, заниматься не самыми приятными вещами. К тому же, такой подход давал богатую почву для ошибок. Но вот, в один прекрасный день, я открыл для себя Америку, идея пришедшая мне в голову навсегда избавила мои проекты от проблем с настройками. Именно о этой идеи я и хочу вам рассказать.
1. Теория
С чего начинаются все проблемы с сохранением настроек? Верно, с визуальных компонентов. Ведь по сути, все значения динамических настроек хранятся в тех или иных полях визуальных компонентов. Осознав это, я задался вопросом: «А что нам это дает?» А вот что:
- У любого компонента есть имя
- У любого компонента есть поле для хранения значения
- Все компоненты на форме можно легко найти
Три этих свойства решают все наши проблемы! Ведь достаточно просто пройтись по всем визуальным компонентам и запомнить их значения!
2. Выбор хранилища
Что сохранять мы нашли, но как это сохранять? Чаще всего, для сохранения настроек используют реестр или *.ini файлы. Я остановил свой выбор на *.ini файлах. Во-первых, загаживать реестр совершенно ни к чему. Во-вторых, *.ini файлы позволяют легко переносить настройки с одной машины на другую, что очень удобно. Ну и в-третьих, структура этих файлов очень располагает к нашему методу:
[название_блока1]
название_переменной1=значение_переменной1
название_переменной2=значение_переменной2
…
название_переменнойN=значение_переменнойN[название_блока2]
название_переменной1=значение_переменной1
название_переменной2=значение_переменной2
…
название_переменнойN=значение_переменнойN…
[название_блокаN]
название_переменной1=значение_переменной1
название_переменной2=значение_переменной2
…
название_переменнойN=значение_переменнойN
Эта структура идеально подходит для хранения наших настроек:
[тип_компонента]
название_компонента=значение