Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/31: Рейтинг темы: голосов - 31, средняя оценка - 4.68
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
1

Сохранение настроек в .txt

24.10.2011, 11:31. Просмотров 5537. Ответов 62
Метки нет (Все метки)

Всем доброго времени суток. У меня возник вопрос, как можно сохранить настройки (цвет окна, шрифта, значение некоторых переменных) в .txt файле, так что бы потом программа при запуске обращалась к ним? Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 11:31
Ответы с готовыми решениями:

Сохранение настроек
Доброго времени суток. Как можно сохранять настройки порограмы.Зарание спасибо.

Сохранение настроек
Есть программа которая сохраняет свои настройки ну например в ini или txt файл...

Сохранение настроек.
Есть много чекбоксов. Как можно сохранить у файл или инифайл то, отмечен ли...

Сохранение настроек в INI
Здравствуйте ! Почитал эту тему...

Сохранение настроек проекта
Всем привет! Никто ни разу не сталкивался с сохранением настроек проекта?...

62
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
26.10.2011, 21:29  [ТС] 21
Спасибо, более чем подробно)

Добавлено через 29 минут
Цитата Сообщение от Samrisbe Посмотреть сообщение
#include <IniFiles.hpp> // не забудь подключить
Выдаёт ошибку, что не может подключить этот файл. Но если пишу так #include "Option.ini", то ругаться перестаёт, но продолжает ругаться на неизвестный символ "Ini" и "Panel1" из строк
C++
1
2
3
CheckBox1->Checked = Ini->ReadBool("CheckBoxes","CheckBox1",CheckBox1->Checked);
Panel1->Color = Ini->ReadInteger("Panels","Panel1",Panel1->Color); 
Label1->Caption = Ini->ReadString("Labels","Label1","");
. Хотя элемент "Panel1" у меня есть в форме... но похоже, что всё таки он его определяет, как символ.

Добавлено через 4 минуты
Да и на "Label1" тоже ругается...

Добавлено через 12 секунд
Да и на "Label1" тоже ругается...

Добавлено через 7 минут
Может с таким определение файла AnsiString path = IncludeTrailingPathDelimiter("Option"); надо использовать другие команды записи и считывания данных?
0
LK
Заблокирован
26.10.2011, 21:30 22
#include <IniFiles.hpp> подключет модуль для работі с файлами ИНИ , можно пробовать #include "IniFiles.hpp"

#include "Option.ini" смысла не имеет, если у вас работа с ИНИ вынесена в отдельный юнит, тогда он подключается #include "ВашЮнит.h" , но это, судя по всему, не в данном случае.
0
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
26.10.2011, 21:34  [ТС] 23
Хех, не понял почему, но он перестал ругаться на присоединение файла, но на неизвестные символы ругаться не перестал.
0
LK
Заблокирован
26.10.2011, 21:34 24
C++
1
IncludeTrailingPathDelimiter("Option");
аналогично "Option\\", т.е.,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
AnsiString path ="Option\\Test.ini";
//or
AnsiString path = ExtractFilePath(Application->ExeName)+
                  "Option\\Test.ini";
//
TIniFile *Ini = new TIniFile(path); // Адрес и название твоего ини
//or
AnsiString path = "Option\\";
// or
AnsiString path = ExtractFilePath(Application->ExeName)+
                  "Option\\";
//
TIniFile *Ini = new TIniFile(path+"Test.ini"); // Адрес и название твоего ини
0
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
26.10.2011, 21:39  [ТС] 25
Всё также неизвестные символы... Можете скинуть какой нить маленький исходник, который бы заносил в файл цвет фона и потом при перезагрузке считывал его?
0
LK
Заблокирован
26.10.2011, 23:54 26
без файла ини, который у вас почему-то "неизвестные символы", а в обычный текстовый файл, обозванный для солидности .cfg (с файлом ини уже достаточно изложено ранее):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
TForm1 *Form1;
 
TStringList *options = new TStringList;
AnsiString filename = "options.cfg";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Form1->Color = clRed;
  Application->Title = "Имя приложения";
  Panel1->Caption = "Новый заголовок для панели";
  Label1->Caption = "Новый заголовок для метки";
  Label1->Font->Color = clLime;
  Button1->Caption = "Изменить";
  Form1->Caption = "Сохранение настроек без файла ИНИ";
// заполняем список настроек
  options->Add(ColorToString(Form1->Color));
  options->Add(Application->Title);
  options->Add(Panel1->Caption);
  options->Add(Label1->Caption);
  options->Add(ColorToString(Label1->Font->Color));
  options->Add(Button1->Caption);
  options->Add(Form1->Caption);
// посмотрим, как это выглядит
  Memo1->Clear();
  Memo1->Text = options->Text;
  // удаляем файл во избежание возможных дальнейших неприятностей
  if (FileExists(filename)) {
    DeleteFile(filename);
  }
  // сохраняем настройки
  options->SaveToFile(filename);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
  // загружаем настройки из файла
  if (FileExists(filename)) {
    options->LoadFromFile(filename);
  }
  // применяем настройки
  for (int i =0;i<options->Count;i++) {
    // не забыть бы, в каком порядке добавляли
    Form1->Color = StringToColor(options->Strings[0]);
    Application->Title = options->Strings[1];
    Panel1->Caption = options->Strings[2];
    Label1->Caption = options->Strings[3];
    Label1->Font->Color = StringToColor(options->Strings[4]);
    Button1->Caption = options->Strings[5];
    Form1->Caption =  options->Strings[6];
  }
  ShowMessage(Application->Title);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  delete options;
  options = NULL;
}
//---------------------------------------------------------------------------
текст конфигурационного файла
clRed
Имя приложения
Новый заголовок для панели
Новый заголовок для метки
clLime
Изменить
Сохранение настроек без файла ИНИ
Проект в приложении (RAD XE2, хотя, в данном случае, это не имеет значения, просто используйте код).
Этот способ намного неудобнее, чем ини, поскольку многое приходится предусматривать самостоятельно, хотя это и не смертельно.

консультации и техническая поддержка не предоставляются
1
Вложения
Тип файла: rar WithoutIni.rar (904.6 Кб, 26 просмотров)
Samrisbe
1352 / 722 / 66
Регистрация: 28.01.2011
Сообщений: 1,979
27.10.2011, 00:36 27
Исходник от LK, надо посмотреть на стиль программирования.

Добавлено через 19 минут
У меня забостовал, походу Rad xe не имеет этого хедера:

C++
1
#include <System.Classes.hpp>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[BCC32 Error] untWithoutIni.h(10): E2209 Unable to open include file 'System.Classes.hpp'
  Full parser context
    untWithoutIni.cpp(6): #include untWithoutIni.h
[BCC32 Error] untWithoutIni.h(11): E2209 Unable to open include file 'Vcl.Controls.hpp'
  Full parser context
    untWithoutIni.cpp(6): #include untWithoutIni.h
[BCC32 Error] untWithoutIni.h(12): E2209 Unable to open include file 'Vcl.StdCtrls.hpp'
  Full parser context
    untWithoutIni.cpp(6): #include untWithoutIni.h
[BCC32 Error] untWithoutIni.h(13): E2209 Unable to open include file 'Vcl.Forms.hpp'
  Full parser context
    untWithoutIni.cpp(6): #include untWithoutIni.h
[BCC32 Error] untWithoutIni.h(14): E2209 Unable to open include file 'Vcl.ExtCtrls.hpp'
  Full parser context
    untWithoutIni.cpp(6): #include untWithoutIni.h
0
LK
Заблокирован
27.10.2011, 00:39 28
просто
C++
1
2
3
4
5
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
имхо, проще сделать новый проект в ХЕ и применить твой любимый копипейст.
1
Programmer.
Прогер
631 / 262 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
27.10.2011, 07:00 29
LK,
DrSMERTb,

Простите но я вообшета не понял зачем сохранять параметры в другом файле

Убейте но не понял (То же самое труд приходится, что и на обичном переименование компонента...)


Ну вот я работаю на проекте в котором (как ранше сам мастер LK посоветовал) должно быть минимум 2 языка, так воот, У меня тут куча названий по Англисскому и по Грузинскому (далее по Русскому тоже) и зачем мне так, просто если
Button1->Caption = "English";

Просто обратно написать
if(нахрен чтото случилос)
Button1->Caption = "Русский";

Вот ето я реално не понял...

Не по теме:

Ну ето всё канечно если толко учёба а не собераешся так реализировать программу...

0
LK
Заблокирован
27.10.2011, 07:46 30
ну как - зачем ? например, при нажатии на кнопку меняется интерфейс на английский. Если использовать не кнопки, а ListBox, например, то достаточно нашлепать копий файла cfg , занести и имена в ListBox, перевести внутренности на нужные языки, и грузить соотвествующий фал при нажатии на соотвествующий итем списка, имея нужный интерфейс и не написав ни одной строки кода для его получения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  // загружаем настройки из файла
  // в єтот файл м ничего не сохраняли
  if (FileExists("options_eng.cfg")) {
    options->LoadFromFile("options_eng.cfg");
  }
  // применяем настройки
  for (int i =0;i<options->Count;i++) {
    // не забыть бы, в каком порядке добавляли
    Form1->Color = StringToColor(options->Strings[0]);
    Application->Title = options->Strings[1];
    Panel1->Caption = options->Strings[2];
    Label1->Caption = options->Strings[3];
    Label1->Font->Color = StringToColor(options->Strings[4]);
    Button1->Caption = options->Strings[5];
    Form1->Caption =  options->Strings[6];
  }
}
это простые примеры, но они, по-моему, помогают понят, как работает тот самый пресловутый файл ИНИ.
2
Вложения
Тип файла: rar WithoutIni.rar (897.9 Кб, 10 просмотров)
LK
Заблокирован
27.10.2011, 07:59 31
текст файла options_eng.cfg
clBlue
Application Name
Panel1 New Caption
Label1 New Caption
clYellow
Change
Saving Options Without INI
и вот как это выглядит
1
Миниатюры
Сохранение настроек в .txt   Сохранение настроек в .txt   Сохранение настроек в .txt  

Сохранение настроек в .txt  
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
27.10.2011, 16:02  [ТС] 32
Я к сожалению пока не разобрался в вашем исходнике, но это только пока. Взял из рание указанной ссылки: вот так прописываю на вписывание данных
C++
1
2
TIniFile *ini = new TIniFile(GetCurrentDir() + "\\MyINI.INI");
ini->WriteInteger("Setting Color", "FormColor", Form1->Color);
и на считывание вот так
C++
1
2
3
4
5
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TIniFile *ini = new TIniFile(GetCurrentDir() + "\\MyINI.INI");
Form1->Font->Color = ini->ReadInteger("Setting Color", "FormColor", 0);
}
Но ничего в файле он не приписывает. Кто может пожсказать почему?
0
Flyer
wtf!?
747 / 278 / 24
Регистрация: 21.05.2010
Сообщений: 732
27.10.2011, 16:05 33
почому что Form->Color не есть integer?
0
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
27.10.2011, 16:06  [ТС] 34
а что это есть?)
0
Flyer
wtf!?
747 / 278 / 24
Регистрация: 21.05.2010
Сообщений: 732
27.10.2011, 16:06 35
TColor?
0
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
27.10.2011, 16:08  [ТС] 36
Ну там же прописывается номер цвета? Поэтому вроде, как я понимаю это int, а следовательно integer или я где то ошибаюсь?
0
Flyer
wtf!?
747 / 278 / 24
Регистрация: 21.05.2010
Сообщений: 732
27.10.2011, 16:18 37
а не, сорри, таки integer'oм пишет и читает нормально
Кинь ini в другую папку, не в ту же где exe . Что то типа
C++
1
TIniFile *ini = new TIniFile(GetCurrentDir() + "\\wtf\\MyINI.INI");
0
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
27.10.2011, 16:34  [ТС] 38
Т.е. прописано у меня получается всё верно?
0
Flyer
wtf!?
747 / 278 / 24
Регистрация: 21.05.2010
Сообщений: 732
27.10.2011, 16:47 39
ну в принципе да.
я вот недавно пробовал читать с ини, то даже с правильным текстом не писало пока ини лежал в папке с ехе, как только переместил все стало работать
0
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
27.10.2011, 18:59  [ТС] 40
Так, а как будет выглядеть эта строка
C++
1
GetCurrentDir() + "\\wtf\\MyINI.INI"
если переместить в папку?

Добавлено через 7 минут
А сори)) Малость перепутал)

Добавлено через 31 минуту
Во и правда помогло) Спасибо.)
0
27.10.2011, 18:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2011, 18:59

Сохранение настроек в Ini из ComboBox.
Разобрался с ini файлом, вот только возник вопрос, как сохранить настройки из...

Сохранение настроек в зкрытый файл
Добрго всем времени суток! Я просмотрел все темы и с грустью константировал...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru