Основное меню
Главная
Написать мне
Гостевая
Новости сайта

Статьи
О Языках программирования
Delphi
Visual Basic
JavaScript
VBScript

Мои программы
CLOCK
CD-organizer
Delphi. Работа с *.INI файлами

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)