Работа с ini файлами в Delphi Вообще, ini-файлы – очень удобная вещь. В ini-файл можно записать практически всё, хотя создан он в основном для хранения настроек программы. Структура ini-файла очень проста: весь файл поделён на секции. В секциях содержатся ключи и эти ключи хранят значения. Вот пример открытого в блокноте ini-файла: [Form properties] Width=450 Height=320 Left=10 Top=35 [Application properties] Dir=C:\Мои документы\Musuc Date=28.09.02 В этом ини-файле, как мы видим, 2 секции: Form properties и Application properties. В каждой из этих секций есть ключи, содержащие числа, строковые выражения, дату. Запись в файл осуществляется путём указания секции ини-файла, названия ключа и указания самого значения. Ниже я опишу способы использования ини-файла на Borland Delphi. Для работы с ини-файлами в Delphi существует модуль IniFiles. В нём описан нужный нам класс TIniFile. 1. Включите Delphi и создайте новый проект. 2. Допишите в Uses новый модуль IniFiles. 3. Создайте глобальную переменную класса TIniFile. var Form1: TForm1; IniFile: TIniFile; 4. При создании формы надо инициализировать переменную IniFile: procedure TForm1.FormCreate(Sender: TObject); begin IniFile:=TIniFile.Create('C:\Program files\MyApplication\MyIni.ini'); end; Инициализация проходит с участием дополнительного параметра типа string. Это имя файла. Если имя введено не полностью, а, например, так: 'MyIni.ini', то файл создастся при записи в папке Windows. Я же рекомендую создавать файл в папке с программой (её можно узнать так: ExtractFilePath(Application.ExeName)). 5. Как осуществить запись в файл? Для записи в ини-файл есть несколько процедур у класса TIniFile - смотря что надо записать. Процедура записи строки: WriteString(const Section, Ident, Value: string); Процедура записи цифры: WriteInteger(const Section, Ident: string; Value: Longint); Процедура записи булевого выражения: WriteBool(const Section, Ident: string; Value: Boolean); Запись даты: WriteDate(const Section, Name: string; Value: TDateTime); Запись время: WriteTime(const Section, Name: string; Value: TDateTime); Запись даты и время вместе: WriteDateTime(const Section, Name: string; Value: TDateTime); Запись не целого численного значения: WriteFloat(const Section, Name: string; Value: Double); Запись потока: WriteBinaryStream(const Section, Name: string;Value: TStream); Во всех этих функциях обязательно указывать секцию (Section), имя ключа (Name) и записываемое значение. Для наглядности вы можете поместить на форму кнопку и по её нажатию можете прописать следующее: procedure TForm1.Button2Click(Sender: TObject); begin IniFile.WriteString('Form info','Form caption',Caption); IniFile.WriteInteger('Form info','Left',Left); IniFile.WriteInteger('Form info','Top',Top); IniFile.WriteInteger('Form info','Width',Width); IniFile.WriteInteger('Form info','Height',Height); IniFile.WriteTime('Other','Write time',Time); end; По выполнению этого кода программа создаст (если ещё не создан) файл в указанном при процедуре Create месте и запишет в него примерно следующее: [Form info] Form caption=Form1 Left=192 Top=107 Width=544 Height=375 [Other] Write time=23:13:55 6. Процедура чтения из ини-файла осуществляется похожим способом. Для чтения существуют функции: ReadString(const Section, Ident, Default: string): string; ReadInteger(const Section, Ident: string; Default: Longint): Longint; ReadBool(const Section, Ident: string; Default: Boolean): Boolean; ReadBinaryStream(const Section, Name: string; Value: TStream): Integer; ReadDate(const Section, Name: string; Default: TDateTime): TDateTime; ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime; ReadFloat(const Section, Name: string; Default: Double): Double; ReadTime(const Section, Name: string; Default: TDateTime): TDateTime; Каждая функция возвращает прочтённое из файла значение. Если по каким-либо причинам прочтение не удалось, то функция возвращает значение, указанное в параметре самой функции как Default. Например, для прочтения из нашего ини-файла значения Form caption надо написать следующее: Edit1.Text:=IniFile.ReadString('Form info', 'Form caption','Ошибка при чтении!'); В этом примере тексту помещённого на форму Edit-а присваивается прочтённое из файла значение. В нашем случае тексту Edit-а будет присвоено значение «Form1». Если чтение не удастся, то тексту Edit-а будет присвоено значение «Ошибка при чтении». Другие процедуры и функции для работы с ини-файлами: Проверка, существует ли секция: function SectionExists(const Section: string): Boolean; Прочтение всей секции: procedure ReadSection(const Section: string; Strings: TStrings); Прочтение всего файла (все секции записываются в Strings): procedure ReadSections(Strings: TStrings); Прочтение всех значений в заданной секции: procedure ReadSectionValues(const Section: string; Strings: TStrings); Удалить заданную секцию со всеми её значениями: procedure EraseSection(const Section: string); Удаление определённого ключа (и его значения) в секции: procedure DeleteKey(const Section, Ident: String); Проверка, существует ли заданный ключ в указанной секции: function ValueExists(const Section, Ident: string): Boolean;