Работа с Ini
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?
Поскажите пожалуйста как прочитать из секции .INI-файла все параметры и загрузить их в ListBox?
begin
IniFile:=TIniFile.Create('myfile.ini');
IniFile.ReadSectionValues('SectionName', ListBox1.Items);
...
IniFile.Free;
end;
Между прочим, хелп читать полезно ;)
Между прочим, хелп читать полезно ;)
Спасибо, вчера к утру уже разобрался, но у меня почему-то не работает это:
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().
Спасибо, вчера к утру уже разобрался, но у меня почему-то не работает это:
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:
Parameter1=Value
Parameter2=Value
В ListBox1 будет:
Parameter2=Value
т.е. всю строку INI и повторно считывать значение не нужно - оно уже считано. В общем и сам должен был это заметить по элемента в ListBox.
Код-то в общем правильный, только не обязательно использовать ListBox1.Items.Strings[ListIndex], достаточно ListBox1.Items[ListIndex].
ReadSectionValues считывает значения...
Да, все верно. Если исползовать ReadSectionValues(...,ListBox1.Items) то в ListBox имеем строки вида Parameter=Value.
Все оказалось даже проще чем я думал.
Для отображения параметров, нужно было использовать просто ReadSections(...),а для просмотра значения выбранного в ListBox параметра ReadString().
Получиось:
....
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-файлом.
Это нужно для того, чтоб потом в цикле For і=1 to колпараметров do.. обойти все параметры и найти параметр который удовлетворяет имеющемуся значению. То есть мне нужно на выходе получить значение і.
Или, другими словами как можно получить имя параметра по его значению?.
Есть файл вида:
[секция]
1=Вася
2=Коля
3=Петя
Имея имя нужно найт какому имени параметра оно соответствует(1,2 или 3).
Скажите, а как можно подсчитать количество параметров в определенной секции Ini-файла?
Это нужно для того, чтоб потом в цикле For і=1 to колпараметров do.. обойти все параметры и найти параметр который удовлетворяет имеющемуся значению. То есть мне нужно на выходе получить значение і.
Или, другими словами как можно получить имя параметра по его значению?.
Есть файл вида:
[секция]
1=Вася
2=Коля
3=Петя
Имея имя нужно найт какому имени параметра оно соответствует(1,2 или 3).
Вариант 1 - см. выше ;)
Вариант 2:
Завести еще один параметр с количеством параметров:
[секция]
count=3
1=Вася
2=Коля
3=Петя
Можно сделать еще проще, коль уж имена параметров являются числами: просто перебирать все числа до тех пор, пока параметр не будет найден.
ИМХО, INI не предназначен для таких задач... мож лучше посмотреть в сторону БД?
Я не хотел заводить еще одну секцию.
А додуматься что можно просто организовать цикл не обращая внимания на количество записей в секции перебирать числа и проверять имя параметра додуматься ума не хватило. Видимо от 3-х суточного сидения за монитором начал сильно тормозить. При том что это первая моя программа. :)
ИМХО, INI не предназначен для таких задач... мож лучше посмотреть в сторону БД?.
Можно было бы... Но количество записей в Таблице там будет максимум 30. Поэтому думаю это неэффективно. А размер программы с сопутствующими библиотеками увеличится серьезно.
Посему было сделано Project->Add New Project...
:). Попробую начать сначала.