RSS

Работа с INI файлами в Delphi

Практически любое программное обеспечение способно запоминать (сохранять) настройки установленные пользователем. К примеру, внешний вид окна, язык и мн. др. Для сохранения настроек приложения есть несколько способов:
1. Реестр — все настройки и установки программы хранятся в системном реестре Windows.
2. INI файлы — настройки сохраняются в файл с расширением .ini
3. Создание файла с собственной структурой и способом хранения настроек.

Первый способ требует установки приложения, а именно создания новых веток и ключей в реестре. Этот способ подходит больше для крупных программных продуктов, либо программ в которых необходима связь с реестром. В простых (а иногда и сложных) программах проще всего использовать INI (Initialization file) файлы. Ниже будет рассмотрен принцип работы с INI, используя средства языка Delphi.

Структура INI файлов

INI файлы в системе Windows выглядят следующим образом:

или 

т.е. фактически это текстовый (txt) документ и легко редактируется приложением блокнот. Структура INI файла так же проста, она имеет категорию(секцию), которая указывается в квадратных скобках ([menu]) и значения(идентификатор) Value = 256, где Value имя некоторого параметра в программе, например ширина окна, а 256-собственно значение этого параметра. Общий вид структуры выглядит так:

[menu]
f.heigth = 1440
f.width = 900
[language]
default = russian

Ну все. Достаточно теории. приступим к практике.
Создайте форму со следующими компонентами: две кнопки Button, Edit(Вкладка Standard), SpinEdit(вкладка Samples) и checkbox (вкладка Standard). Примерный вид формы такой:

Нам необходимо по нажатию кнопки «Сохранить в INI» сохранить в example.ini (распологается в папке с программой) текстовое значение Edit, числовое значение Spin и логическое значение checkbox. При нажатии кнопки «Считать INI«, соответственно прочитать эти значения.
Структура файла example.ini следующая:

[TEST]
EditVal =
SpinVal =
CheckboxVal =

[FormPosition]
fTop=
fLeft=

В разделе TEST мы храним все вышеперечисленные значения, а раздел FormPosition будет хранить позицию формы на экране.

Приступим к реализации.
Для работы с INI в Delphi имеется стандартная библиотека inifiles. Пропишем ее в uses.
Нам понадобятся две переменные pathINI (будет хранить путь к файлу example.ini) и sIniFile типа TIniFile. Эти переменные должны быть общими для всех процедур в модуле, поэтому их необходимо прописать в разделе var перед  implementation

При загрузке нашего приложения, переменная pathINI должна получить полный путь к файлу ini. Для того чтоб произошли какие либо действия при загрузке формы, у объекта Form есть событие OnCreate. Кликните два раза по свободному месту на форме, после чего в редакторе кода появится процедура TForm1.FormCreate , добавьте в нее следующую строчку:

pathINI:=extractfilepath(application.ExeName)+’\example.ini’;

Код для кнопок будет следующим:

procedure TForm1.Button1Click(Sender: TObject);
begin
  //создаем ссылку на объект INI
  sIniFile := TIniFile.Create(pathINI);

  // запись в INI строки
  sIniFile.WriteString(‘TEST’, ‘EditVal’, edit1.Text);

  // запись в INI целого числа
  sIniFile.WriteInteger(‘TEST’, ‘SpinVal’, SpinEdit1.Value);

  // запись в INI логического значения boolean
  sIniFile.WriteBool(‘TEST’, ‘CheckboxVal’, CheckBox1.Checked);

  //запись значений позиции формы
  sIniFile.WriteInteger(‘FormPosition’, ‘fTop’, form1.Top);
  sIniFile.WriteInteger(‘FormPosition’, ‘fLeft’, form1.Left);
  // очистка переменной объекта
  sIniFile.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

if FileExists(pathINI) then //проверяем есть ли файл INI
   begin
     sIniFile := TIniFile.Create(pathINI);
     edit1.Text:=sIniFile.ReadString(‘TEST’, ‘EditVal’, ‘Раздел не найден!’);
     spinedit1.Value:=sIniFile.readInteger(‘TEST’, ‘SpinVal’, 0);
     checkbox1.Checked:=sIniFile.readBool(‘TEST’, ‘CheckboxVal’, false);
     form1.Top:= sIniFile.readInteger(‘FormPosition’, ‘fTop’, 10);
     form1.Left:= sIniFile.readInteger(‘FormPosition’, ‘fLeft’, 10);
     sIniFile.Free;
   end
else showmessage(‘Файл example.ini не найден!’);

end;

Код не сложный, но при чтении значений из INI файла, есть один параметр (третий после указания секции и идентификатора), этот параметр будет присвоен в случае если идентификатор не будет найден т.е. значение по умолчанию. В таблице ниже приведен полный список  функций записи и чтения в INI файл:

Функции записи

Описание

Функции чтения

Описание

WriteInteger

Запись целочисленного значения

ReadInteger

Чтение целочисленного значения

WriteString

Запись текстового значения

ReadString

Чтение текстового значения

WriteBool

Запись логического значения

ReadBool

Чтение логического значения

WriteDate

Запись значения типа дата

ReadDate

Чтение значения типа дата

WriteBinaryStream

Запись двоичного значения

ReadBinaryStream

Чтение двоичного значения

WriteDateTime

Запись даты и времени

ReadDateTime

Чтение даты и времени

WriteFloat

Запись вещественного числа

ReadFloat

Чтение вещественного числа

WriteTime

Запись времени

ReadTime

Чтение времени

С помощью INI файлов можно сделать, к примеру, мультиязычное приложение, т.е. хранить в разных файлах INI наименование кнопок, меню на различных языках. Но это тема уже другой статьи. А пока все. Ниже Вы можете загрузить полный исходный код рассмотренного примера, а так же рабочее приложение.

Прикрепленный файл: INI in Delphi.zip