Delphi. Работа с *.INI файлами
 В некоторых программах бывает нужно сохнанять настройки, для этого можно использовать *.INI файла. В этой статье я попробую тебе обьяснить как сохранять данные в *.ini и читать из *.ini. Давай взглянем из чего состоит *.ini файл:
[window]
width=100
height=100
[button]
left=0
top=0
width=10
height=10
 То, что в файле заключено в квадратные скобки, можно назвать ЗАГОЛОВОК или ИМЯ ОТДЕЛА, а остальное - ПАРАМЕТРЫ со ЗНАЧЕНИЯМИ. В нашем примере, отдел с заголовком
window имеет параметры
width со значением 100 и
height со значением 100. Точно также и с отделом
button.
Теперь давай разберёмся как осуществляется работа с *.ini файлами в Delphi. Ну, сначала добавляется модуль
IniFiles в раздел
uses, затем создаётся переменная через которую мы будем работать с *.ini файлом, типа
TIniFile. Чтоб создать файл, или открыть надо писать:
IniFile:=TIniFile.Create('имя_файла.ini');
чтение из *.ini файлов
Чтение из файлов осуществляетя следующей функцией:
переменная:=IniFile.Read****(отдел, параметр, значение по умолчанию);
Сейчас я полностью обьясню что здесь написано.
переменная - это переменная определённого типа в которую мы хотим занести данные из *.ini файла.
IniFile - это переменная типа
TIniFile, через которую мы "общаемся" с файлом.
Read**** - это надо разобрать. Вместо
**** стоит тип переменной в которую мы заносим данные из файла. Примеры:
ReadString - чтение строковой переменной
ReadBool - чтение логической переменной
ReadDate - чтение даты
ReadTime - чтение времени
ReadDateTime - чтение даты и времени в одном параметре
ReadFloat - чтение числа с плавающей точкой
Поехали дальше.
отдел - это строковая переменная,
параметр - тоже, а вот
значение по умолчание - это на случай если не обнаружится данного *.ini файла, или не обнаружится указанной секции, или в секции не будет заданного параметра, и тогда функция возвращает значение по умолчанию.
Вот тебе более подробный пример:
button1.width:=IniFile.ReadInteger(button, width, 10);
или же:
MainForm.Caption:=IniFile.ReadString(MainForm, Caption, 'Привет');
запись в *.ini файлы
Вот тебе функция для записи в *.ini файл:
IniFile.Write****(отдел, параметр, записываемая величина);
Сейчас, я опять всё обьясню...
IniFile - это всё таже переменная типа
TIniFile, через которую мы "общаемся" с файлом,
Write****... Вместо
**** стоит тип записываемой величины. Примеры:
WriteString - запись строковой переменной
WriteBool - запись логической переменной
WriteDate - запись даты
WriteTime - запись времени
WriteDateTime - запись даты и времени в одном параметре
WriteFloat - запись числа с плавающей точкой
Поехали дальше.
отдел - это строковая переменная,
параметр - тоже, а вот
записываемая величина, это то что мы и хотим записать с тем типом, который мы указали.
Вот тебе более подробный пример:
IniFile.WriteInteger(form, width, 200);
или же:
IniFile.WriteString(user, name, edit1.text);
Да, и чуть не забыл после каждого обращения очищай переменную:
IniFile.Free;
Пример работы с *.ini файлом
Создавай новый проэкт, сохраняй его под именем
iniTest, добавляй в раздел
uses модуль
IniFiles, добавил? Поехали дальше!
Кидай на форму компонент TEdit
с именем Caption со вкладки
Standart, две TButton
, назови первую readButton, а вторую writeButton и ещё добавь с той-же вкладки компонент TComboBox
, и добавь в свойсво Items две строчки Мужчина и Женчина, вроде всё... Посмотри что у меня получилось:
Чтобы не писать несколько раз одно и тоже надо написать две процедурки собственными ручками... Не отчаивайся, процедурки-то всего 2 :-)))
Чтобы написать эти процедуры для начала напиши:
procedure write_ini;
procedure read_ini;
до раздела
var модуля
Unit1.
Затем сразу после строки:
{$R *.dfm}
пиши сами процедуры:
procedure write_ini;
var
  ini:TIniFile;
begin
  ini:=TIniFile.Create('MainForm.ini');
  ini.WriteInteger('FORM', 'Top', MainForm.Top);
  ini.WriteInteger('FORM', 'Left', MainForm.Left);
  ini.WriteInteger('FORM', 'Width', MainForm.Width);
  ini.WriteInteger('FORM', 'Height', MainForm.Height);
  ini.WriteString('USER', 'Name', MainForm.userName.Text);
  ini.WriteInteger('USER','Pol', MainForm.Combo.ItemIndex);
  ini.Free;
end;
procedure read_ini;
var
 ini:TIniFile;
begin
  ini:=TiniFile.Create('MainForm.ini');
  MainForm.Top:=ini.ReadInteger('FORM', 'Top', 0);
  MainForm.Left:=ini.ReadInteger('FORM', 'Left', 0);
  MainForm.Width:=ini.ReadInteger('FORM', 'Width', 226);
  MainForm.Height:=ini.ReadInteger('FORM', 'Height', 123);
  MainForm.userName.Text:=ini.ReadString('USER', 'Name', 'Anonim');
  MainForm.Combo.ItemIndex:=ini.ReadInteger('USER', 'Pol', 1);
  ini.Free;
end;
Потом пиши в событиях FormCreate и readButtonClick строчку:
read_ini;
А в событиях FormClose и writeButtonClick строчку:
write_ini;
Тем самым у нас при создании формы и нажатии кнопки Восстановить, выполняется процедура WRITE_INI, которая считывают данные из MainForm.ini , а при закрытии формы и нажатии кнопки Сохранить, выполняется процедура READ_INI, которая записывает данные в MainForm.ini...
!ПРОЧТИТЕ ЭТО ВНИМАТЕЛЬНО!
ПО УМОЛЧАНИЮ ФАЙЛ СОЗДАЁТСЯ В ПАПКЕ ВИНДЫ!
Следующий пример создаёт файл в папке с программой:
ini:=TIniFile.Create(ExtractFileDir(Application.ExeName)+ '\' + 'MainForm.ini' );
Если чего не понятно, то пиши на мыло
vostepan@mail.ru
На всякий случай вот тебе исходнЯк(8,32 kb)