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

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

29.12.2009, 20:53. Показов 34452. Ответов 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
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
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
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru