Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с Ini

11K
24 апреля 2005 года
Kruteshok
2 / / 24.04.2005
У меня возникла проблема с INI файлами. Раньше я с ними никогда не работал и обратился к F1. Там были примеры:
procedure TMainForm.FormCreate(Sender: TObject);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
try
Top := Ini.ReadInteger( 'Form', 'Top', 100 );
Left := Ini.ReadInteger( 'Form', 'Left', 100 );
Caption := Ini.ReadString( 'Form', 'Caption', 'Kruteshok Explorer' );
if Ini.ReadBool( 'Form', 'InitMax', false ) then
WindowState := wsMaximized
else

WindowState := wsNormal;
finally
Ini.Free;
end;
end;


procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
Ini: TIniFile;
begin
Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
try
Ini.WriteInteger( 'Form', 'Top', Top);
Ini.WriteInteger( 'Form', 'Left', Left);
Ini.WriteString( 'Form', 'Caption', Caption );
Ini.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );

finally
Ini.Free;
end;
end;

Но мне нужно, чтоб в INI файл сохранялись настройки CheckBox'a. Пробовал составить подобные функции, но ничего. Как мне работать с CheckBox'om через INI?
301
24 апреля 2005 года
lord Kelvin
897 / / 08.11.2004
А что именно про чекбокс ты хочешь сохранить?
11K
24 апреля 2005 года
Kruteshok
2 / / 24.04.2005
Уже все. Сам додумался :)
12K
23 ноября 2005 года
VTM
20 / / 23.11.2005
Поскажите пожалуйста как прочитать из секции .INI-файла все параметры и загрузить их в ListBox?
303
24 ноября 2005 года
makbeth
1.0K / / 25.11.2004
Цитата:
Originally posted by VTM
Поскажите пожалуйста как прочитать из секции .INI-файла все параметры и загрузить их в ListBox?


 
Код:
var IniFile: TIniFile;
begin
   IniFile:=TIniFile.Create('myfile.ini');
   IniFile.ReadSectionValues('SectionName', ListBox1.Items);
   ...
   IniFile.Free;
end;

Между прочим, хелп читать полезно ;)
12K
25 ноября 2005 года
VTM
20 / / 23.11.2005
Цитата:
Originally posted by makbeth

Между прочим, хелп читать полезно ;)



Спасибо, вчера к утру уже разобрался, но у меня почему-то не работает это:

Код:
procedure TForm1.ListBox1Click(Sender: TObject);
var MyIniFile: TIniFile;
var ListIndex:Integer;
var ListName:String;
begin
MyIniFile:=TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
ListIndex:=ListBox1.ItemIndex;
ListName:=ListBox1.Items.Strings[ListIndex];
Edit1.text:=USMSFile.ReadString('Section1',ListName,'none'); // эта строчка не работает. :(
//Edit2.Text:=MyIniFile.ReadString('Section2','Parameter','none');
MyIniFile.Free;
end;

При чем закомментированная строка работает. Я понимаю,что приведенный код не ахти какой правильный, но надо как-то учиться. :)
Не понимаю почему не работает ListName в функции ReadString().
303
25 ноября 2005 года
makbeth
1.0K / / 25.11.2004
Цитата:
Originally posted by VTM
Спасибо, вчера к утру уже разобрался, но у меня почему-то не работает это:

Код:
procedure TForm1.ListBox1Click(Sender: TObject);
var MyIniFile: TIniFile;
var ListIndex:Integer;
var ListName:String;
begin
MyIniFile:=TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
ListIndex:=ListBox1.ItemIndex;
ListName:=ListBox1.Items.Strings[ListIndex];
Edit1.text:=USMSFile.ReadString('Section1',ListName,'none'); // эта строчка не работает. :(
//Edit2.Text:=MyIniFile.ReadString('Section2','Parameter','none');
MyIniFile.Free;
end;

При чем закомментированная строка работает. Я понимаю,что приведенный код не ахти какой правильный, но надо как-то учиться. :)
Не понимаю почему не работает ListName в функции ReadString().


ReadSectionValues считывает значения Parameter=Значение.
INI:

 
Код:
[Section1]
Parameter1=Value
Parameter2=Value

В ListBox1 будет:
 
Код:
Parameter1=Value
Parameter2=Value

т.е. всю строку INI и повторно считывать значение не нужно - оно уже считано. В общем и сам должен был это заметить по элемента в ListBox.
Код-то в общем правильный, только не обязательно использовать ListBox1.Items.Strings[ListIndex], достаточно ListBox1.Items[ListIndex].
12K
25 ноября 2005 года
VTM
20 / / 23.11.2005
Цитата:
Originally posted by makbeth
ReadSectionValues считывает значения...


Да, все верно. Если исползовать ReadSectionValues(...,ListBox1.Items) то в ListBox имеем строки вида Parameter=Value.
Все оказалось даже проще чем я думал.
Для отображения параметров, нужно было использовать просто ReadSections(...),а для просмотра значения выбранного в ListBox параметра ReadString().
Получиось:

Код:
MyIniFile.ReadSection('Section1',ListBox1.Items);
....
procedure TForm1.ListBox1Click(Sender: TObject);
var MyIniFile: TIniFile;
var ListIndex:Integer;
var ListName:String;
begin
MyIniFile:=TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
 ListIndex:=ListBox1.ItemIndex;
 ListName:=ListBox1.Items[ListIndex];
 ListCode:=MyIniFile.ReadString('Section1',ListName,'none');
end;

Спасибо за помощь в изучении методов работы с INI-файлом.
12K
29 ноября 2005 года
VTM
20 / / 23.11.2005
Скажите, а как можно подсчитать количество параметров в определенной секции Ini-файла?
Это нужно для того, чтоб потом в цикле For і=1 to колпараметров do.. обойти все параметры и найти параметр который удовлетворяет имеющемуся значению. То есть мне нужно на выходе получить значение і.
Или, другими словами как можно получить имя параметра по его значению?.
Есть файл вида:
[секция]
1=Вася
2=Коля
3=Петя
Имея имя нужно найт какому имени параметра оно соответствует(1,2 или 3).
303
30 ноября 2005 года
makbeth
1.0K / / 25.11.2004
Цитата:
Originally posted by VTM
Скажите, а как можно подсчитать количество параметров в определенной секции Ini-файла?
Это нужно для того, чтоб потом в цикле For і=1 to колпараметров do.. обойти все параметры и найти параметр который удовлетворяет имеющемуся значению. То есть мне нужно на выходе получить значение і.
Или, другими словами как можно получить имя параметра по его значению?.
Есть файл вида:
[секция]
1=Вася
2=Коля
3=Петя
Имея имя нужно найт какому имени параметра оно соответствует(1,2 или 3).


Вариант 1 - см. выше ;)
Вариант 2:
Завести еще один параметр с количеством параметров:
[секция]
count=3
1=Вася
2=Коля
3=Петя

Можно сделать еще проще, коль уж имена параметров являются числами: просто перебирать все числа до тех пор, пока параметр не будет найден.

ИМХО, INI не предназначен для таких задач... мож лучше посмотреть в сторону БД?

12K
01 декабря 2005 года
VTM
20 / / 23.11.2005
2 makbeth Спасибо за ответ.
Я не хотел заводить еще одну секцию.
А додуматься что можно просто организовать цикл не обращая внимания на количество записей в секции перебирать числа и проверять имя параметра додуматься ума не хватило. Видимо от 3-х суточного сидения за монитором начал сильно тормозить. При том что это первая моя программа. :)

ИМХО, INI не предназначен для таких задач... мож лучше посмотреть в сторону БД?.
Можно было бы... Но количество записей в Таблице там будет максимум 30. Поэтому думаю это неэффективно. А размер программы с сопутствующими библиотеками увеличится серьезно.

Посему было сделано Project->Add New Project...
:). Попробую начать сначала.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог