![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Spiker13 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 26.4.2006 Репутация: нет Всего: нет |
Здравствуйте. Программа с настройками, должна их сохранять и загружать, Ini файлом как-то несолидно, а сохранение и загоузка из реестра не могу понять смысл. Пожалуйста розясните, хотя бы примером сохранения и загрузки переменной. Зарание спасибо.
|
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
|
|||
|
||||
| Poseidon |
|
||||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Универсальный алгоритм сохранения настроек
Во время своего опыта в роли программиста частенько приходилось создавать программы, где имелось большое количество различных параметров, опций и настроек... Думаю я не один, кто сталкивался с этим. Так вот сохранение всех этих настроек и последующее их считывание, например с реестра или .ini файла всегда было ужасом. Вот недавно опять натолкнулся на эту проблему... Но в этот раз было так скучно и лениво было писать что-то вроде:
... так что я решил этот процесс автоматизировать хоть немного. В общем придумал я следующее. Взять форму настроек и пробежаться в цикле по всем контролам, попутно записывая их основные свойства в буфер, который потом и записать одним махом, например в реестр. Для считывания настроек проделать тот же процесс, только в обратном порядке.
первое, что делает процедура, это создает поток данных в памяти, он как раз и будет тем буфером, в котором и будут храниться все настройки. Далее процедура начинает перебор всех компонентов на форме. Если очередной компонент является TCheckBox или TEdit, то в буфер записываются их основные свойства, т.е. Checked и Text соответственно. Далее мы записываем буфер как двоичные данные в реестр. Процедура загрузки будет выглядеть следующим образом:
Т.е. сначала получаем размер записанных настроек, выделяем под них память, считываем, переносим для удобства в TMemoryStream и считываем. Порядок не нарушается, т.к. пробег по контролам всегда идет по строго определенной последовательности указанной TabOrder. Все! Теперь можно добавлять новые настройки, удалять старые и не изменять код. В данном случае код упрошен, необходимо предусмотреть также обход контролов на панелях (TPanel), группах (TGroupBox) и т.п. © Украдено -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||||
|
|||||||
| sandycrazy |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.7.2006 Репутация: нет Всего: нет |
зачем засерать реестр?! сколько проблем это создает простым пользователям!!! намного проще пользоваться ini и программа сможет работать без установки!
Poseidon, забыл написать код для удаления этой фигни из реестра при деинсталяции программы)) Это сообщение отредактировал(а) sandycrazy - 25.7.2006, 00:19 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
И сколько же
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Palladin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 932 Регистрация: 15.5.2007 Где: Беларусь г.Гомель Репутация: нет Всего: 17 |
С одной стороны .ini лучше т.к. пользователь в случае чего сможет чтонить исправить, допустим игра Пираты Карибского Моря, в ней настройки сохранялись именно в файл .ini и у меня была проблема, по дефолту разрешение экрана ставилось 800х600 но у меня на машине почемуто игра с таким разрешением не хотела запускатся, тут-то меня и спас .ini я в него влез и изменил параметр с 800x600 на 1024х768 и всё, но у .ini файлов помимо плюсов есть и минус
Такчто на мой взгляд лучше реестр!!! но это моё личное дело -------------------- Глуп тот кто полагается на истину авторитета, а не на авторитет истины [color=red]KAV&KIS==Evil[/color] |
|||
|
||||
| jack128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 18.5.2005 Репутация: нет Всего: 4 |
lol. Супер довод! рекомендация MS - проста как валенок. Настройки приложения хранить в ветках HKLM\Software\<Company Name>\<Product Name> или HKCU\<Company Name>\<Product Name> Ну и во многом это помогло простому юзеру?
дык нужно писать приложения так, чтобы кривые настройки не могшли его(приложение) повалить |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
На сегодняшний день оптимальней считается линуксовый подход. То есть данные сохраняются в файл в AppData. Почему так? А потому что это home каталог и у юзверя всегда есть права на него, в отличие от папки программы. Реестр был придуман всего лишь для того, чтобы не нагружать FAT. C появлением NTFS это уже не актуально. Что касается реестра - поиск по форуму по слову TRegistry |
|||
|
||||
| jack128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 18.5.2005 Репутация: нет Всего: 4 |
||||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
TRegistry.
Если нужно на апи, можно и на апи. Просто TRegistry удобнее. Ну не такие древние, как кодинг на асме на ЕС1486 на 8086 процессоре, но то же история. Я к тому, что сейчас сама MS рекомендуют сохранять в AppData, а не в реестр. |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |