| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Сохранение настроек в реестр |
| Автор: Spiker13 5.7.2006, 22:02 |
| Здравствуйте. Программа с настройками, должна их сохранять и загружать, Ini файлом как-то несолидно, а сохранение и загоузка из реестра не могу понять смысл. Пожалуйста розясните, хотя бы примером сохранения и загрузки переменной. Зарание спасибо. |
| Автор: ASGDeveloper 5.7.2006, 22:36 | ||
|
| Автор: Poseidon 7.7.2006, 00:59 | ||||||
| Универсальный алгоритм сохранения настроек Во время своего опыта в роли программиста частенько приходилось создавать программы, где имелось большое количество различных параметров, опций и настроек... Думаю я не один, кто сталкивался с этим. Так вот сохранение всех этих настроек и последующее их считывание, например с реестра или .ini файла всегда было ужасом. Вот недавно опять натолкнулся на эту проблему... Но в этот раз было так скучно и лениво было писать что-то вроде:
... так что я решил этот процесс автоматизировать хоть немного. В общем придумал я следующее. Взять форму настроек и пробежаться в цикле по всем контролам, попутно записывая их основные свойства в буфер, который потом и записать одним махом, например в реестр. Для считывания настроек проделать тот же процесс, только в обратном порядке.
первое, что делает процедура, это создает поток данных в памяти, он как раз и будет тем буфером, в котором и будут храниться все настройки. Далее процедура начинает перебор всех компонентов на форме. Если очередной компонент является TCheckBox или TEdit, то в буфер записываются их основные свойства, т.е. Checked и Text соответственно. Далее мы записываем буфер как двоичные данные в реестр. Процедура загрузки будет выглядеть следующим образом:
Т.е. сначала получаем размер записанных настроек, выделяем под них память, считываем, переносим для удобства в TMemoryStream и считываем. Порядок не нарушается, т.к. пробег по контролам всегда идет по строго определенной последовательности указанной TabOrder. Все! Теперь можно добавлять новые настройки, удалять старые и не изменять код. В данном случае код упрошен, необходимо предусмотреть также обход контролов на панелях (TPanel), группах (TGroupBox) и т.п. © Украдено |
| Автор: sandycrazy 25.7.2006, 00:15 |
| зачем засерать реестр?! сколько проблем это создает простым пользователям!!! намного проще пользоваться ini и программа сможет работать без установки! Poseidon, забыл написать код для удаления этой фигни из реестра при деинсталяции программы)) |
| Автор: Alexeis 25.7.2006, 00:37 |
| И сколько же |
| Автор: Palladin 25.7.2006, 01:47 |
| С одной стороны .ini лучше т.к. пользователь в случае чего сможет чтонить исправить, допустим игра Пираты Карибского Моря, в ней настройки сохранялись именно в файл .ini и у меня была проблема, по дефолту разрешение экрана ставилось 800х600 но у меня на машине почемуто игра с таким разрешением не хотела запускатся, тут-то меня и спас .ini я в него влез и изменил параметр с 800x600 на 1024х768 и всё, но у .ini файлов помимо плюсов есть и минус Такчто на мой взгляд лучше реестр!!! но это моё личное дело |
| Автор: Snowy 25.7.2006, 23:00 | ||
На сегодняшний день оптимальней считается линуксовый подход. То есть данные сохраняются в файл в AppData. Почему так? А потому что это home каталог и у юзверя всегда есть права на него, в отличие от папки программы. Реестр был придуман всего лишь для того, чтобы не нагружать FAT. C появлением NTFS это уже не актуально. Что касается реестра - поиск по форуму по слову TRegistry |
| Автор: jack128 25.7.2006, 23:22 |
разговор шел именно о реестре, как я понял. если для тебя - это стародавнии времена, то тебе крупно повезло. |
| Автор: Snowy 25.7.2006, 23:37 |
| TRegistry. Если нужно на апи, можно и на апи. Просто TRegistry удобнее. Ну не такие древние, как кодинг на асме на ЕС1486 на 8086 процессоре, но то же история. Я к тому, что сейчас сама MS рекомендуют сохранять в AppData, а не в реестр. |