Большинство приложений в Windows имеют собственные файлы инициализации, например PowerBuilder, Office и Cstar. Поэтому чтение и запись файлов инициализации — это технология, которую должен освоить каждый старший программист. Хотя чтение и запись файлов инициализации также можно выполнить с помощью Object Текстовые файлы в Паскале читаются и записываются одинаково, но поскольку файл инициализации отличается от обычных текстовых файлов, он имеет свой собственный фиксированный формат (см. файл инициализации ниже — это файл rdfnt.ini, предоставленный в ucdos). использовать текстовый файл для чтения. Написание преобразования формата не только очень утомительно, но и подвержено ошибкам. Чтобы облегчить программистам чтение и запись данных в файле инициализации, Delphi предоставляет пользователям класс TIniFile, с помощью которого создается файл инициализации. читать и писать очень удобно.
Содержимое файла rdfnt.ini в Ucdos:
[Каталог шрифтов True Type]
Dir=C:WINDOWSSYSTEM
[Список шрифтов True Type]
АРИАЛ.TTF=64
АРИАЛБД.TTF=65
АРИАЛИ.TTF=66
АРИАЛБИ.TTF=67
РАЗ.TTF=68
ВРЕМЯБД.TTF=69
ВРЕМЯ.TTF=70
TIMESBI.TTF=71
COUR.TTF=72
COURBD.TTF=73
КУРИ.TTF=74
КУРБИ.TTF=75
[Использовать все шрифты True Type]
Все=0
Класс TiniFile не является компонентом Delphi, поэтому его нельзя найти в шаблоне VCL Delphi. Он определен в модуле inifiles в системе Delphi. Поэтому, чтобы использовать класс TiniFile, вы должны явно использовать директиву Uses inifiles в модуле. файл, который использует этот класс.
В классе TiniFile определено множество функций-членов. Вот несколько наиболее часто используемых функций-членов:
⑴Создать()
Функция определяется как: конструктор Create(const FileName: string);
Эта функция создает объект класса TiniFile. Параметр FileName — это имя файла инициализации, который необходимо прочитать и записать.
Если файл, который нужно прочитать и записать, находится в каталоге Windows (например, файл system.ini), вы можете напрямую записать имя файла, не указывая путь, в противном случае вам необходимо указать путь (например, d:ucdos dfnt.ini). ).
Если файл существует в указанном каталоге согласно следующим правилам, откройте файл инициализации, в противном случае создайте файл инициализации в указанном каталоге.
⑵ЧитатьСекции()
Процесс определяется как: PROcedure ReadSections(Strings: TStrings);
Этот процесс прочитает все имена узлов (то есть часть, заключенную в скобки [], например [шрифты True Type] в файле rdfnt.ini) из созданного объекта класса TiniFile (то есть связанного с ним файла инициализации). list]) хранится в списке строк. Параметр Strings — это имя переменной списка строк.
⑶ ЧитатьЗначенияСекции()
Процедура определяется как: процедура ReadSectionValues(const Раздел: строка; Строки: TStrings);
Этот процесс преобразует каждое ключевое слово (например, ARIALBI.TTF) в узле, соответствующем значению параметра Раздел (например, [Список шрифтов True Type] в файле rdfnt.ini) и содержащемуся в нем значению (например, ARIALBI. Значение ключевого слова TTF — 67) считывается в список строк, указанный параметром Strings.
⑷ ЧитатьСекцию()
Процедура определяется как: процедура ReadSection(const Раздел: строка; Строки: TStrings);
Этот процесс считывает каждое ключевое слово в узле, соответствующее значению параметра Раздел, в список строк, указанный параметром Strings. Разница с ReadSectionValues() заключается в том, что он не считывает соответствующее значение каждого ключевого слова.
⑸ ЧитатьСтроку()
Функция определяется как: function ReadString(const Раздел, Идентификатор, По умолчанию: строка): строка;
Эта функция возвращает значение ключевого слова, соответствующее имени узла со значением параметра Раздел и имя ключевого слова со значением параметра Ident (например, значение ключевого слова ARIALBI.TTF в разделе [Список шрифтов True Type]). это 67). Если ключевое слово в указанном узле или разделе не существует, функция возвращает значение параметра Default по умолчанию. Возвращаемое значение представляет собой строковые данные.
Если тип данных значения ключевого слова в указанном узле не является строкой, вы можете использовать функцию-член ReadInteger() для чтения целочисленного значения и функцию-член ReadBool() для чтения логического значения.
⑹ ЗаписьСтроки()
Процедура определяется как: процедура WriteString(const Раздел, Идентификатор, Значение: строка);
Этот процесс устанавливает значение ключевого слова, в котором значение параметра «Секция» является именем узла, а значение параметра «Идентификатор» является именем ключевого слова, равному значению параметра «Значение». Этот процесс устанавливает строковые данные.
Если существуют и указанный узел, и ключевое слово, значение Value используется для замены исходного значения; если указанный узел не существует, узел автоматически добавляется в связанный файл инициализации, а значением узла является значение Раздел параметра, а ключевое слово A автоматически добавляется под узлом. Имя ключевого слова — это значение параметра Ident, а значение, соответствующее ключевому слову, — это значение параметра Value. Если узел существует, но ключевое слово существует. не существует, ключевое слово автоматически добавляется под узлом. Имя ключевого слова — это значение параметра Ident, а значение, соответствующее этому ключевому слову, — это значение параметра Value.
Чтобы установить целочисленное значение, вызовите функцию-член WriteInteger(), используя функцию-член WriteBool(), чтобы установить логическое значение;
Зная назначение вышеперечисленных функций, нетрудно создать или прочитать и записать файл инициализации. Ниже приведен практический пример, иллюстрирующий метод чтения файла инициализации. Шаги следующие:
⒈ Поместите два комбинированных списка с именамиsectionComboBox и IdentComboBox в форму, которая должна читать и записывать файл инициализации. Поле ввода с именем IdentValueEdit хранит значение соответствующего ключевого слова. Кнопка команды изменения с именем CmdChang может использоваться для изменения значения ключевого слова. После изменения используйте кнопку команды сохранения с именем CmdSave, чтобы сохранить измененное значение ключевого слова в связанном файле инициализации. Имя модуля, соответствующего форме, установлено в IniUnit, имя формы установлено в IniForm, а макет формы показан на рисунке 1 ниже:
⒉ В интерфейсной части модуля IniUnit используется inifile для указания имени модуля, определенного классом TiniFile, на который нужно ссылаться. И определите объект класса TiniFile в части описания переменной, например:
вар IniFile: TiniFile;
⒊ Установите процедуру события OnCreate формы. Используйте функцию-член Create класса TIniFile, чтобы создать объект TIniFile, используйте этот объект для чтения и записи файла инициализации rdfnt.ini в каталоге d:ucdos и прочитайте все узлы в файле инициализации в поле списка комбинацийsectionComboBox. через функцию-член ReadSections() используйте функцию-член ReadSection(), чтобы прочитать все ключевые слова в первом узле в IdentComboBox. В объединенном списке используйте функцию-член ReadString(), чтобы отправить значение первого ключевого слова в поле ввода IdentValueEdit.
⒋ Создайте процесс события OnChange для комбинированного списка DivisionComboBox. При выборе разных элементов в списке (то есть разных имен узлов) используйте функцию-член ReadSection(), чтобы прочитать все ключевые слова в выбранном узле в комбинированный список IdentComboBox, и используйте функцию-член ReadString() для чтения первое Значение ключевого слова отправляется в поле ввода IdentValueEdit.
⒌ Установите процесс события OnChange для списка комбинаций IdentComboBox. При выборе разных элементов (то есть разных имен ключевых слов) в поле списка используйте функцию-член ReadString(), чтобы отправить значение ключевого слова в поле ввода IdentValueEdit.
⒍ Создайте процесс события OnClick для командной кнопки CmdChang. Сделайте содержимое поля ввода IdentValueEdit доступным для изменения (поле ввода IdentValueEdit нельзя изменить без нажатия командной кнопки) и установите действительную кнопку CmdSave, чтобы измененное значение ключевого слова можно было сохранить в связанном файле инициализации.
⒎ Создайте процесс события OnClick для командной кнопки CmdSave. Если значение ключевого слова изменилось, вызовите функцию-член WriteString(), чтобы сохранить измененное значение ключевого слова на диск.
⒏ Создайте процедуру события OnDestroy формы. В случае сбоя формы созданный объект TIniFile освобождается, чтобы освободить системные ресурсы, используемые объектом.
На этом этапе после запуска проекта чтение и запись файла инициализации может проходить гладко. Конечно, вы также можете использовать функцию-член EraseSection() для удаления указанного раздела, а также функцию-член DeleteKey() для удаления указанного ключевого слова. Из-за ограниченного места я не буду подробно описывать это здесь. Если вам интересно, вы можете обратиться к справке по использованию Delphi.
Ниже приведен исходный код этого модуля:
блок IniUnit;
интерфейс
использует
Windows, сообщения, SysUtils, классы, графика, элементы управления, формы, диалоги,
StdCtrls, ini-файлы;
тип
TIniForm = класс (TForm)
РазделComboBox: TComboBox;
Метка1: TLabel;
CmdSave: TButton;
CmdChang: TButton;
ИдентКомбоБокс: ТКомбоБокс;
Идентвалуередит: ТЕдит;
Метка2: TLabel;
Метка3: TLabel;
процедура FormCreate (Отправитель: TObject);
процедура РазделComboBoxChange (Отправитель: TObject);
процедура FormDestroy (Отправитель: TObject);
процедура CmdChangClick (Отправитель: TObject);
процедура CmdSaveClick (Отправитель: TObject);
процедура IdentComboBoxChange (Отправитель: TObject);
частный
{Частные заявления}
общественный
{Публичные заявления}
конец;
вар
ИниФорм: ТИниФорм;
{Чтение и запись файлов инициализации Windows через класс TIniFile в Delphi}
ИниФайл: ТИниФайл;
выполнение
{$R *.DFM}
процедура TIniForm.FormCreate(Отправитель: TObject);
начинать
{ Используйте функцию-член Create класса TIniFile, чтобы создать пару TIniFile.
Object. Этот объект используется для чтения и записи файла rdfnt.ini в каталоге d:ucdos.
Если файл, который нужно прочитать и записать, находится в каталоге Windows (например, system.ini),
Имя файла можно написать напрямую, не указывая путь}
IniFile:=TIniFile.Create('d:ucdos dfnt.ini');
{ Все содержимое файла инициализации system.ini, связанного с объектом TIniFile
Названия разделов с разделами (то есть частью, заключенной в скобки []) отправляются в выпадающую группу
Поле со списком РазделComboBox}
РазделComboBox.Очистить;
IniFile.ReadSections(SectionComboBox.Items);
{Выберите имя первого раздела файла system.ini}
РазделComboBox.ItemIndex:=0;
РазделComboBoxChange(Отправитель);
CmdSave.Enabled:=False;
конец;
{Соответствующие элементы в выбранном разделе в поле со списком IniComboBox
Переменные и соответствующие значения передаются в многострочный текстовый редактор IniMemo}
процедура TIniForm.SectionComboBoxChange(Отправитель: TObject);
начинать
ИдентКомбоБокс.Очистить;
IniFile.ReadSection(SectionComboBox.Text,
ИдентКомбоБокс.Предметы);
IdentComboBox.ItemIndex:=0;
IdentComboBoxChange(Отправитель);
конец;
процедура TIniForm.IdentComboBoxChange(Отправитель: TObject);
начинать
IdentValueEdit.Enabled:=False;
{Читать выбранное значение ключевого слова}
Идентвалуедит.текст:=
IniFile.ReadString(SectionComboBox.Text,
ИдентификаторКомбоБокс.Текст,');
конец;
процедура TIniForm.CmdChangClick(Отправитель: TObject);
начинать
CmdSave.Enabled:=Истина;
IdentValueEdit.Enabled:=True;
Идентвалуедит.SetFocus;
конец;
процедура TIniForm.CmdSaveClick(Отправитель: TObject);
начинать
если IdentValueEdit.Modified, то начните
IniFile.WriteString(SectionComboBox.Text,
ИдентификаторComboBox.Текст,
ИдентЗначениеРедактировать.Текст);
конец;
IdentValueEdit.Enabled:=False;
CmdSave.Enabled:=False;
конец;
процедура TIniForm.FormDestroy(Отправитель: TObject);
начинать
IniFile.Free {освободить созданный объект};
конец;
конец.
Вышеописанный метод прошел отладку с помощью Delphi 3.0 под Windows 95.