Лекция № 15

Тема: "Создание настраиваемых форм. Работа с INI файлами"

 

План

1. Назначение и структура .INI файла

2. Доступ к .INI файлам

3. Запись данных в .INI файл

4. Чтение данных из .INI файла

5. Удаление данных из .INI файлов

 

1. Назначение и структура .INI файла

Одним из условий популярности программного обеспечения на рынке является возможность адаптации интерфейса и режимов работы приложения под потребности конкретного пользователя. Часто в программе создается раздел меню Сервис с командой Параметры или Опции, с помощью которой можно настроить работу ПО. Такие настройки должны храниться и автоматически использоваться при всех последующих запусках программы.

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

Файлы .INI – это текстовые файлы, предназначенные для хранения информации о настройках разных приложений. Информация в файле логически группируется в разделы, каждый из которых начинается оператором заголовка, заключенным в квадратные скобки. В строках, идущих под заголовком, содержится информация о каком-то параметре программы (ключе) в виде:

 

ключ=значение

 

2. Доступ к .INI файлам

В Delphi работу с файлами .INI можно осуществлять с помощью создания в приложении объекта типа TIniFile. Этот тип описан в модуле IniFiles, который нужно подключать к приложению оператором Uses (автоматически это не делается).

Объект типа TIniFile имеет ряд методов для работы с .INI файлами. Для работы с.INI файлом нужно создать экземпляр объекта TIniFile, связав его с конкретным физическим файлом на диске. Для создания экземпляра объекта используют следующие действия:

 

TIniFile.Create(имя файла);

 

В качестве примера выше приведем код, который демонстрирует связывание объекта TIniFile с файлом на диске:

 

Uses . . ., IniFiles;

. . .

Var

. . .

 

    //описываем переменную для хранения экземпляра объекта TIniFile

    ini:TIniFile;

. . .

 

begin

. . .

    //создаем экземпляр объекта TIniFile

    //и связываем его с физическим файлом primer.ini,

    //расположенным в папке с программой

    ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'\primer.ini');

    //выполняем нужные операции с .INI файлом

    . . .

    //удаляем из памяти ПК созданный объект TIniFile

    ini.Free;

end; 

 

В данном примере объект TIniFile связывается с файлом primer.ini, расположенным в папке с файлом программы. Для определения пути к файлу программы в Delphi есть стандартная функция вида:

 

 ExtractFilePath(Application.ExeName)

 

Если при создании экземпляра объекта TIniFile указанного физического файла на диске не окажется, то файл будет создан автоматически.

 

3. Запись данных в .INI файл

Для записи значений ключей у объекта TiniFile существует несколько методов. Каждый из них записывает значение соответствующего типа. Объявление всех этих методов очень похожи.

 

//запись текстового параметра

ini.WriteString('раздел', 'ключ', 'значение');

//запись целого параметра

ini.WriteInteger('раздел', 'ключ', значение);

//запись вещественного параметра

ini.WriteFloat('раздел', 'ключ', значение);

//запись логического параметра (true/false)

ini.WriteBool('раздел', 'ключ', значение);

//запись даты

ini.WriteDate('раздел', 'ключ', значение);

//запись времени

ini.WriteTime('раздел', 'ключ', значение);

 

 Если соответствующий раздел или ключ отсутствуют в файле, они автоматически создаются.

 

Пример. Пусть при закрытии формы нужно запоминать ее размер и положение на экране. Для этого в .INI файле создадим раздел "Form" с ключами "Width", "Height", "Х", "Y". Код напишем в событии закрытия формы.

 

uses . . ., IniFiles;

. . .

procedure TForm1.FormClose(Sender: TObject; Var Action: TCloseAction);

//описываем переменную для хранения экземпляра объекта TIniFile

var ini:TIniFile;

begin

    //создаем экземпляр объекта TIniFile

    ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'\primer.ini');

    //записываем в файл ширину формы

    ini.WriteInteger('Form','Width,Width);

    //записываем в файл высоту формы

    ini.WriteInteger('Form','Height,Height);

    //записываем в файл положение формы по горизонтали

    ini.WriteInteger('Form','X',Left);

    //записываем в файл положение формы по вертикали

    ini.WriteInteger('Form','Y',Top);

    //удаляем из памяти экземпляр объекта TIniFile

    ini.Free;

end;

 

4. Чтение данных из .INI файла

Для чтения значения ключей также есть несколько методов, предназначенных для работы с данными разных типов. К таким методам относятся:

 

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

ini.ReadString ('раздел', 'ключ', знач. по умолч.);

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

ini.ReadInteger ('раздел', 'ключ', знач. по умолч.);

//чтение вещественного значения

ini.ReadFloat ('раздел', 'ключ', знач. по умолч.);

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

ini.ReadBool ('раздел', 'ключэ, знач. по умолч.);

//чтение даты

ini.ReadDate ('раздел', 'ключ', знач. по умолч.);

//чтение времени

ini.ReadTime ('раздел', 'ключ', знач. по умолч.);

 

Параметр "знач. по умолч." определяет значение, которое возвращается в случае, если в файле не указано или не найдено значение соответствующего ключа.

 

Продолжим наш пример. Пусть при создании формы нужно прочитать записанные параметры формы и отобразить форму в соответствующем виде. Код напишем в событии OnCreate формы.

 

uses . . ., IniFiles;

. . .

procedure TForm1.FormCreate(Sender: TObject);

//описываем переменную для хранения экземпляра объекта TIniFile

var ini:TIniFile;

begin

    //создаем экземпляр объекта TIniFile

    ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'\primer.ini');

   

    //считываем данные из файла и применяем к свойствам формы

    //считываем ширину

    Width:=ini.ReadInteger('Form','Width',Width);

    //считываем высоту

    Height:=ini.ReadInteger('Form','Height',Height);

    //считываем положение по горизонтали

    Left:=ini.ReadInteger('Form','X',Left);

    //считываем положение по вертикали

    Top:=ini.ReadInteger('Form','Y',Top);

   

    //удаляем из памяти экземпляр объекта TIniFile

    ini.Free;

end;

 

5. Удаление данных из .INI файлов

В Delphi есть методы для удаления данных из .INI файлов:

 

ini.DeleteKey ('ключ'); //удаляет ключ из .INI файла

ini.EraseSection ('раздел'); //удаляет раздел из .INI файла

 

Например, команда

 

ini.DeleteKey ('Form', 'Width');

 

удаляет из .INI файла ключ "Width".

 

Команда

 

ini.EraseSection ('Form');

 

удаляет из .INI файла раздел "Form".

 

Для удаления самого файла .INI нужно воспользоваться стандартными процедурами для работы с файлами:

 

//если удаляемый файл существует на диске, то 

if FileExists(ExtractFilePath(Application.ExeName)+'\primer.ini') then

    //то удаляем файл 

    DeleteFile(ExtractFilePath(Application.ExeName)+'\primer.ini');

 

Замечание:

 

Вопросы для самоконтроля

1. Дайте характеристику INI файлу.

2. В каком формате хранятся параметры в INI файлах?

3. Какой модуль надо подключить для работы по INI файлами? Опишите стандартные действия для работы c INI файлом.

4. Приведите команды записи и чтения  данных в/из INI файла.

5. Приведите команды удаления данных из INI файла и самого файла с диска.