Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/180: Рейтинг темы: голосов - 180, средняя оценка - 4.51
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332

Сохранение настроек программы в *ini файл.

29.12.2009, 20:53. Показов 34365. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сохранить параметры программы в файл *ini ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2009, 20:53
Ответы с готовыми решениями:

Сохранение настроек в INI
Здравствуйте ! Почитал эту тему https://www.cyberforum.ru/cpp-builder/thread757450.html . Все хорошо , но не понял, как мне сделать...

Сохранение настроек в Ini из ComboBox.
Разобрался с ini файлом, вот только возник вопрос, как сохранить настройки из COmboBox void __fastcall TForm4::FormCreate(TObject...

Сохранение положения компонента на форме (Сохранение параметра в Ini-файл)
Не знаю верно ли назвал тему. Доброго вечера тебе, всяк сюда входящий. Подскажите пожалуйста с вопросом: Имеется Form1, на нем...

27
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
29.12.2009, 20:59
Лучший ответ Сообщение было отмечено как решение

Решение

нашёл на одном форуме
Сохраняем настройки в INI-файлах
Большинство программистов сталкиваются с проблемой сохранения настроек своей программы, но сегодня мы решим эту проблему. Мы научимся работать с ini файлами. Еще одним способом сохранять настройки является реестр, но его лучше не изменять, да и работать с ним немного сложнее. Итак, ini-файл имеет простую и понятную структуру :
[Секция1]
Идентификатор1 = Значение1
Идентификатор2 = Значение2
[Секция2]
Идентификатор1 = Значение1
Для использования ini-файлов, в C++Builder предусмотрен модуль IniFiles , его мы и подключаем:
#include IniFiles.hpp
Далее, нужно создать обьект класса TIniFile, назовем его Ini.
После
TForm1 *Form1;
пишем:
TIniFile *Ini = new TIniFile("c:/options.ini");
значения сохраняет на диске С: в файл options.ini .

После этого, на форму кинем две кнопки (TButton) и два Эдита (TEdit). Мы будем сохранять текст Эдитов в ini-файл, а потом загружать его.
Пишем обработчик события нажатия кнопки Button1. Она будет сохранять текст Эдитов в наш options.ini


void __fastcall TForm1::Button1Click(TObject *Sender)
{{
Ini->WriteString("Edits","Edit1",Edit1->Text);
Ini->WriteString("Edits","Edit2",Edit2->Text);
}
Так, как мы работаем с текстом, мы использовали метод класса WriteString,
если нам нужно было бы работать с числами, мы бы написали WriteInteger .

Где параметры для этой функции:
"Edits" - имя секции;
"Edit1" - указатель на объект;
"Edit1->Text" - строка, которую мы сохраняем (текст эдита).

Далее, рассмотрим пример загрузки параметров с ini , пишем обработчик события для второй кнопки:


void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text = Ini->ReadString("Edits","Edit1","Def");
Edit2->Text = Ini->ReadString("Edits","Edit2","Def");
}
Здесь используем функцию чтения :ReadString , где:
"Edits" - секция из которая нам надо ;
"Edit1" - объект для которого загружаем строку;
"Def" - эта строка заполняет Эдит, если значение ini не найдено;

Этот маленький пример показывает как можно лекго загружать и сохранять параметры Вашей программы в INI-файлы.
10
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
29.12.2009, 23:43
А как пользоваться WriteInteger и ReadInteger?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.12.2009, 23:52
А как пользоваться WriteInteger и ReadInteger?
Читаем содержимое

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
         AnsiString Patch;
         Patch = ExtractFilePath(ParamStr(0)); // получаем путь к каталогу программы
         TIniFile *Ini = new TIniFile(Patch+"options.ini");
         DBGrid1->Columns->Items[0]->Width = Ini->ReadInteger("DBGrid","Items[0]",DBGrid1->Columns->Items[0]->Width);
         DBGrid1->Columns->Items[1]->Width = Ini->ReadInteger("DBGrid","Items[1]",DBGrid1->Columns->Items[1]->Width);
         DBGrid1->Columns->Items[2]->Width = Ini->ReadInteger("DBGrid","Items[2]",DBGrid1->Columns->Items[2]->Width);
         DBGrid1->Columns->Items[3]->Width = Ini->ReadInteger("DBGrid","Items[3]",DBGrid1->Columns->Items[3]->Width);
         DBGrid1->Columns->Items[4]->Width = Ini->ReadInteger("DBGrid","Items[4]",DBGrid1->Columns->Items[4]->Width);
         DBGrid1->Columns->Items[5]->Width = Ini->ReadInteger("DBGrid","Items[5]",DBGrid1->Columns->Items[5]->Width);
         DBGrid1->Columns->Items[6]->Width = Ini->ReadInteger("DBGrid","Items[6]",DBGrid1->Columns->Items[6]->Width);
         DBGrid1->Columns->Items[7]->Width = Ini->ReadInteger("DBGrid","Items[7]",DBGrid1->Columns->Items[7]->Width);
         DBGrid1->Columns->Items[8]->Width = Ini->ReadInteger("DBGrid","Items[8]",DBGrid1->Columns->Items[8]->Width);
         DBGrid1->Columns->Items[9]->Width = Ini->ReadInteger("DBGrid","Items[9]",DBGrid1->Columns->Items[9]->Width);
         DBGrid1->Columns->Items[10]->Width = Ini->ReadInteger("DBGrid","Items[10]",DBGrid1->Columns->Items[10]->Width);
         DBGrid1->Columns->Items[11]->Width = Ini->ReadInteger("DBGrid","Items[11]",DBGrid1->Columns->Items[11]->Width);
         DBGrid1->Columns->Items[12]->Width = Ini->ReadInteger("DBGrid","Items[12]",DBGrid1->Columns->Items[12]->Width);
         DBGrid1->Columns->Items[13]->Width = Ini->ReadInteger("DBGrid","Items[13]",DBGrid1->Columns->Items[13]->Width);
Записываем
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AnsiString Patch;
 Patch = ExtractFilePath(ParamStr(0)); // получаем путь к каталогу программы
 TIniFile *Ini = new TIniFile(Patch+"options.ini");
         Ini->WriteInteger("DBGrid","Items[0]",DBGrid1->Columns->Items[0]->Width);
         Ini->WriteInteger("DBGrid","Items[1]",DBGrid1->Columns->Items[1]->Width);
         Ini->WriteInteger("DBGrid","Items[2]",DBGrid1->Columns->Items[2]->Width);
         Ini->WriteInteger("DBGrid","Items[3]",DBGrid1->Columns->Items[3]->Width);
         Ini->WriteInteger("DBGrid","Items[4]",DBGrid1->Columns->Items[4]->Width);
         Ini->WriteInteger("DBGrid","Items[5]",DBGrid1->Columns->Items[5]->Width);
         Ini->WriteInteger("DBGrid","Items[6]",DBGrid1->Columns->Items[6]->Width);
         Ini->WriteInteger("DBGrid","Items[7]",DBGrid1->Columns->Items[7]->Width);
         Ini->WriteInteger("DBGrid","Items[8]",DBGrid1->Columns->Items[8]->Width);
         Ini->WriteInteger("DBGrid","Items[9]",DBGrid1->Columns->Items[9]->Width);
         Ini->WriteInteger("DBGrid","Items[10]",DBGrid1->Columns->Items[10]->Width);
         Ini->WriteInteger("DBGrid","Items[11]",DBGrid1->Columns->Items[11]->Width);
         Ini->WriteInteger("DBGrid","Items[12]",DBGrid1->Columns->Items[12]->Width);
         Ini->WriteInteger("DBGrid","Items[13]",DBGrid1->Columns->Items[13]->Width);
ReadBool надо описывать?
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
30.12.2009, 00:40
BARS1991, Посмотрите в мою тему - INI Файл и Стиль Шрифта - как сохранить в INI стиль шрифта. Там правда про шрифт, но принцип сохранился, разве что переменные поменять на свои и нужные значения сохранять.
3
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
30.12.2009, 09:02  [ТС]
Спасибо
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
14.02.2011, 23:48
Добрый день!
Вот так написал команду, после запуска программы команда из второй строки меняет свойство Caption в ButtonCancel на текст свойства Hint, если поменять строки кода местами тогда наоборот Hint в Caption.
И еще, не разумлю чем заменить WriteString для записи в ini файл свойство Button-Enabled .

1. Ini->WriteString("Buttons","ButtonCancel",Bu ttonCancel->Hint);
2. Ini->WriteString("Buttons","ButtonCancel",Bu ttonCancel->Caption);
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.02.2011, 00:46
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Samrisbe Посмотреть сообщение
И еще, не разумлю чем заменить WriteString для записи в ini файл свойство Button-Enabled .
Смотрим : Button->Enabled = true; - а true у нас имеет тип BOOL , смотрим, что нам предлагал уважаемый Sasha для типа BOOL ? Значит, WriteBool, ReadBool . Все просто, если чуток подумать .
Работа с файлами INI

Автор: Ghost Rider
http://www.codenet.ru/progr/de... -files.php

Использование *.INI - файлов очень удобно и экономично. В данных файлах вы можете хранить настройки вашей программы (именно для этого они и существуют). Тем самым вы не будете захламлять системный реестр. Использовать *.INI - файлы можно и в других случаях, т.к. синтаксис очень прост и удобен в использовании.

Использование *.INI в Delphi (LK - подправил для C++ Builder)

Для работы с *.INI - файлами в Delphi вам необходимо подключить модуль IniFiles
C++
1
#include <IniFiles.hpp>
и создать объект TIniFile, затем с ним работать. После завершения работы объект необходимо удалить методом Free.

Основные методы:

# new - создает экземпляр объекта TIniFile в качестве параметра указывается путь и имя файла (если путь не указан, то файл создается в стандартной директории Windows (можно использовать GetDir для создания файла в папке с программой))

* delete - удаляет объект TIniFile ( delete имя_вашего_файла_ини; )
* FileName - возвращает имя файла, с которым связан объект TIniFile
* DeleteKey - удаляет ключ в разделе
* EraseSection - удаляет раздел
* ReadInteger - считывает из файла целочисленные данные
* ReadString - считывает из файла строковые данные
* ReadBool - считывает из файла логические (true, false) данные
* WriteBool - записывает в файл логические данные
* WriteString - записывает в файл строковые данные
* WriteInteger - записывает в файл целочисленные данные
* ReadSection - извлекает имена идентификаторов в указанном разделе INI - файла
* ReadSections - извлекает все имена разделов
* ReadSectionValues - извлекает из заданного раздела все ключи
* ReadBinaryStream - считывает поток из файла
* WriteBinaryStream - записывает поток в файл

Для более детального изучения можно обратиться к исходному коду модуля IniFile (однако приведенных выше методов вполне хватает для работы).
Вот несколько дополнительных функций, которые помогут вам в решении некоторых проблем связанных с использованием INI - файлов:
WriteProfileString и WritePrivateProfileString - сбрасывают изменения в INI - файле на диск, что позволяет немедленно записать все изменения в вашем файле настроек. Функции находятся в модуле Windows.pas (импортированы из kernel32.dll).
А вот еще небольшая вещь: сообщение WM_WININICHANGE позволяет отслеживать изменения происходящие в файле Win.ini.

Возможно вам потребуется обрабатывать исключительные ситуации, возникающие при работе с INI - файлами. В этом вам поможет класс EIniFileException (Exception).
Также в модуле IniFiles описаны два дополнительных класса (в помощь TMemIniFile - файлы в памяти (увеличивается быстродействие, но при неправильной работе можно вызвать сбой)) - это TStringHash и THashedStringList.

Скачать пример к статье (ZIP; 1.7Кб)
http://www.codenet.ru/progr/de... -files.zip
7
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.02.2011, 09:22
Цитата Сообщение от LK Посмотреть сообщение
Смотрим : Button->Enabled = true; - а true у нас имеет тип BOOL , смотрим, что нам предлагал уважаемый Sasha для типа BOOL ? Значит, WriteBool, ReadBool . Все просто, если чуток подумать .
Добрый день. А для Form->Color WriteBool не подходит?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
16.02.2011, 09:31
Цитата Сообщение от Samrisbe Посмотреть сообщение
Добрый день. А для Form->Color WriteBool не подходит?
Чтобы тебе сохранить цвет в файле нужно использовать WriteInteger

C++
1
Ini->WriteInteger("ColorBoxes","ColorBox1",ColorBox1->Selected);
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.02.2011, 10:38
Я торможу.
где у меня ошибка?

1. Ini->WriteInteger("Forms","Form",Form->Color);записываем


2. Form->Color = Ini->ReadInteger("Forms","Form","Def"); читаем
0
 Аватар для n00b!!!
11 / 11 / 1
Регистрация: 27.12.2010
Сообщений: 39
16.02.2011, 15:54
когда читаем ,то
C++
1
ini->ReadInteger("Forms","Form",0);
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
16.02.2011, 17:05
C++
1
 Form->Color = Ini->ReadInteger("Forms","Form",Form->Color); //читаем
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.02.2011, 18:26
Теперь вот такую ошибку выбает, и после пуска показывает только черный цвет.

Project.cpp(97): W8018 Assigning int to TColor
0
 Аватар для n00b!!!
11 / 11 / 1
Регистрация: 27.12.2010
Сообщений: 39
16.02.2011, 19:07
не зна,свой пример проверял,работает.
в методе чтения ReadInteger первые два параметра - строки,а третий типа int. так должно быть
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
16.02.2011, 20:02
Всем спасибо! все работает.

Добавлено через 6 минут
Цитата Сообщение от Samrisbe Посмотреть сообщение
Добрый день!
Вот так написал команду, после запуска программы команда из второй строки меняет свойство Caption в ButtonCancel на текст свойства Hint, если поменять строки кода местами тогда наоборот Hint в Caption.

1. Ini->WriteString("Buttons","ButtonCancel",Bu ttonCancel->Hint);
2. Ini->WriteString("Buttons","ButtonCancel",Bu ttonCancel->Caption);
А с этим вопросом не поможете?
0
 Аватар для n00b!!!
11 / 11 / 1
Регистрация: 27.12.2010
Сообщений: 39
16.02.2011, 20:13
Цитата Сообщение от Samrisbe Посмотреть сообщение
А с этим вопросом не поможете?
я вопроса не понял,уже устал к вечеру))попробуй как -нибедь объснить ,что требуется?)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
16.02.2011, 20:32
Да ты меняй не в ини, а в программе, а в ини записывай результат.

Добавлено через 3 минуты
и лучше писать в ини (строковые) переменные, а не значения :
C++
1
2
str1 = ButtonCancel->Hint;
Ini->WriteString("Buttons","ButtonCancel",str1);
- тогда не будешь зависеть от этого самого ини - "а что там в моем этом самом ини записано ?" - а будешь полностью владеть ситуацией.

Добавлено через 12 минут
Ну и вот представь, программа на n-языках (иностранных), так что - делать n-файлов настройки, если там имеются строковые значения? а так значания хранишь в отдельных языковых файлах, а в файл настроек сохраняешь только переменную.
2
24 / 2 / 1
Регистрация: 01.03.2011
Сообщений: 109
03.03.2011, 16:35
НАРОД, ПОМОГИТЕ ПОЖАЛУЙСТА! Как тоже самое сделать не через ini а через xml файл!!!! 3 день ни чего найти не могу!!!!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.03.2011, 17:17
Лучший ответ Сообщение было отмечено как решение

Решение

плохо искал - инфы навалом, только искать надо не "как сохранить настройки", а "как работать с XML"
http://www.functionx.com/cppbu... sson01.htm
http://www.functionx.com/cppbu... sson02.htm
http://www.functionx.com/cppbu... sson03.htm
http://wiki.lazarus.freepascal.org/XML_Tutorial/ru
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2011, 17:17
Помогаю со студенческими работами здесь

Сохранение настроек в ini-файл
Пару дней обучаюсь Delphi , сегодня попробовал написать программу которая сохраняет настройки в конфиг.ини, при закрытии у меня все...

INI - Загрузка и сохранение настроек
Добрый день. Подскажите пожалуйста. Существует ли какой либо класс в C++ в Visual Studio для &quot;INI - Загрузка и сохранение...

Сохранение настроек в .ini - дозапись файла
Всем привет! Понимаю, что тема уже избитая, но у меня возник вопрос. Прога по нажатию кнопки &quot;сохранить&quot; пишет параметры в .ini...

Сохранение настроек в .ini в папке Windows\System32
Доброго времени суток. Сделал свой ScreenSaver. Настройки должны сохраняться в ini-файле в папке вместе с программой. Проблема в том, что...

Пример сохранения настроек программы (ini)
Пожалуйста пришлите или подробно опишите пример сохранения настроек программы(пути к картинкам или visible...) Спасибо=)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru