TIniFile, Delphi, Програмування, статті

У той час як Microsoft, без сумнівів, хотіла б назавжди усунути INI-файли з Windows і змусити розробників додатків зберігати інформацію в Registry, стає ясно, що якийсь час INI-файли ще проіснують. INI-файли є простими текстовими файлами з розширенням. INI, зазвичай хра-нящіміся в каталозі Windows. Вони розроблені для запам’ятовування інформації про прикладні програми, їх параметрах, конфігурації, положенні вікон і т.п. У міру зростання популярності Windows і зростання числа програм, які підтримуються, більшість користувачів обзавелося десятками INI-файлів, що засмічують жорсткий диск. На щастя, вони не вимагають багато місця і як і раніше є зручним способом запоми- нанія параметрів конфігурації. Таким чином, INI-файли реально економлять час.

Якщо ви розробляєте велике і складне додаток з багатьма конфігуруються користувачем параметрами, то все-таки краще скористатися доступом до Windows Registry за допомогою класу TRegistry, ніж покладатися на рудиментарні INI-файли, так поширені в старих версіях Windows. TRegistry висвітлюється в главі 6, “TRegistry і
TRegIniFile.”

INI-файли інкапсулюються класом
TIniFile, який є прямим нащадком кінцевим TObject. Для використання класу
TIniFile і будь-якого його члена необхідно включити
IniFiles в пункт uses того модуля, який отримує доступ до INI-файлів.

INI-файли розділені на пойменовані розділи, що містять ідентифікатори. Кожному ідентифікації тору можна присвоїти значення. Зазвичай значення є двійковим, цілим або строковим. У лістингу 4-1, фрагменті типового файлу WIN.INI, розділи ідентифікуються квадратними дужками, оточуючими ім’я кожного розділу. WIN.INI використаний тільки як приклад. Ваше додаток, як правило, має підтримувати власний INI-файл.

Лістинг 4-1 Розділ типового файлу WIN.INI

[windows]
run=
NullPort=None
load=
device=LaserJet 5P, HPPCL5MS, LPT1:
[desktop]
Wallpaper=(None)
TileWallpaper=1
WallpaperStyle=O
Pattern=(None)
[Intl]
iCountry=1
ICurrDigits=2
iCurrency=0
iDate=0
iDigits=2
iLZero=1
iMeasure=1
iNegCurr=0
iTime=0
iTLZero=0
……………..
Як видно з прикладу, ідентифікатори відокремлені від своїх значень знаком рівності і мають вигляд ідентифікатор = значення. Такий вираз відомо як ключ.

Таблиця 4-1 показує властивості і методи, реалізовані TIniFile.

Таблиця 4-1 Методи і властивості реалізуються TIniFile








































































Використовувати або встановити це … Щоб зробити це … Спадкування
Create Сконструювати примірник TIniFile. TObject
DeleteKey Видалити ідентифікатор INI-файла і його значення. Немає
EraseSection Прибрати з INI-файла цілий розділ. Немає
FileName Отримати інкапсульоване ім’я INI-файла. Немає
ReadBool Витягти з INI-файла логічне значення. Немає
Readinteger Витягти з INI-файла ціле значення. Немає
ReadSection Витягти з розділу INI-файла імена ідентифікаторів. Немає
ReadSections Витягти з INI-файла список імен розділів. Немає
ReadSectionValues Витягти з INI-файла весь вміст розділу. Немає
ReadString Витягти з INI-файла строкове значення. Немає
WriteBool Записати в INI-файл логічне значення. Немає
Writeinteger Записати в INI-файл ціле значення Немає
WriteString Записати в INI-файл строкове значення Немає

Важливо





Методи ТIniFile будуть намагатися знайти INI-файл в каталозі Windows (Зазвичай c: \ WINDOWS в Windows 95 або c: WINNT в Windows NT). Якщо ви хочете читати або писати INI-файл, розташований не в каталозі Windows, слід явно додати шлях до імені INI-файла при його відкритті в Create.


 

Метод Create






























Уражені об’єкти TIniFile
Призначення Метод Create створює екземпляр TIniFile, Який дозволяє маніпулювати INI-файлом.
Оголошення constructor Create (const FileName: string);
Параметри
FileName Ім’я INI-файлу, з яким асоціюється об’єкт TIniFile.
Приклад синтаксису

procedure TForm1.FormCreate (Sender: TObject);
var MyIni: TIniFile;
begin / / Створення екземпляра Myini і присвоєння йому / / INI-файла
MyIni : = TIniFile;
Create(‘TEST.INI’); / / *** Тут виконати обробку INI-файла ***
MyIni.Free;
end;

Опис; Create конструює об’єкт TIniFile, Розподіляючи для нього достатній обсяг пам’яті. Єдиний параметр, fileName, містить Windows ім’я файлу дійсного INI-файла. Якщо до імені файлу не додано шлях, програма буде шукати файл в каталозі Windows (зазвичай c: \ WINDOWS або c: \ WINNT).

Метод DeleteKey


































Уражені об’єкти TIniFile
Призначення Метод DeleteKey видаляє ключ з INI-файла.
Оголошення procedure DeleteKey(const Section, Ident: String);
Параметри
Section Розділ INI-файлу, який містить ключ.
Ident Ім’я видаляється ідентифікатора.
Приклад синтаксису
procedure TForm1.Button1Click(Sender: TObject);
var Myini : TIniFile;
begin
MyIni : = TIniFile.Create(‘DELETE.INI’); / / Видалити ключ, що містить ідентифікатор Option1 з розділу / / Main INI-файла
MyIni.DeleteKey(‘Main’,’Option1′);
MyIni.Free;
end;

Опис DeleteKey очищає цілий ключ, ідентифікатор і його значення.

Метод EraseSection






























Уражені об’єкти TIniFile
Призначення Метод EraseSection видаляє вказаний розділ INI-файла.
Оголошення procedure ErageSection(const Section: string);
Параметри
Section Ім’я розділу, що підлягає видаленню.
Приклад синтаксису
 / / Дана процедура відкриє INI-файл з ім’ям “TEST.INI”, знайдений в / / Каталозі Windows, і видалить розділ під назвою Configuration
procedure TForm1.Button1Click(Sender: TObject); / / Оголошення змінної типу TIniFile під назвою MyIni
var MyIni: TIniFile;
begin / / Створення екземпляра MyIni і присвоєння йому INI-файла
MyIni := TIniFile.Create(‘TEST.INI’); / / Видалити розділ в TEST.INI під назвою Configuration
MyIni.EraseSection(‘Configuration’);
MyIni.Free;
end;

Опис EraseSection видаляє весь розділ INI-файла. Імена розділів відзначаються квадратними дужками, тому розділ Configuration, Використаний вище, повинен виглядати в файлі TEST.INI наступним чином:

[Configuration]
Keyl Кеу2 і т.д.
Розділ триває до імені наступного розділу або до кінця файлу в залежності від того, що буде досягнуто раніше.

Властивість FileName






















Уражені об’єкти TIniFile
Призначення Метод TFileName містить ім’я файлу, інкапсульоване об’єктом
TIniFile.
Оголошення property FileName: string;
Приклад Синтаксису
 / / Дана процедура будег друкувати ім’я INI-файла, / / Інкапсульоване в об’єкті TIniFile
procedure TForm1.Button1Click(Sender:TObject);
var MyIni: TIniFile;
begin / / Створення екзенпляра MyIni і присвоєння йому INI-файла
MyIni : = TIniFile.Create(‘TEST.INI); / / Друкувати ім’я INI-файла у заголовку форми
Form1.Caption := MyIni.FileName;
MyIni.Free;
end;

Опис FileName є властивістю часу виконання, призначеним тільки для читання, і містить ім’я INI-файла, інкапсульоване в екземплярі
TIniFile.

Властивість ReadBool






































Уражені об’єкти TIniFile
Призначення Властивість ReadBool отримує двійкове значення з INI-файла.
Оголошення function ReadBool (const Section, Ident: stringn; Default: Boloean)
: Boolean;
Параметри
Section Ім’я розділу, в якому розташований ідентифікатор.
Ident Ідентифікатор, що підлягає зчитування.
Default Значення ідентифікатора за замовчуванням.
Приклад Синтаксису
 / / Ця процедура перевіряє ідентифікатор TileWallpaper розділу Desktop / / У файлі WIN.INI. Потім встановлюється заголовок форми, що вказує / / На те, включена (on) або вимкнена (off) опція TileWallpaper.
procedure TForm1.FormCreate(Sender: TObject);
var MyIni: TIniFile;
begin
MyIni : = TIniFile.Create(‘Win.ini’);
if MyIni.ReadBool(‘Desktop’,’TileWallpaper’, True) = True then
Form1.Caption := ‘Your desktop wallpaper is tiled’;
else
Form1.Caption : = ‘Your desktop wallpaper is not tiled’;
MyIni.Free;
end;

Опис ReadBool витягує з ідентифікатора в INI-файлі логічне значення.

У наведеному прикладі аналізується ідентифікатор TileWallpaper розділу [Desktop] в WIN.INI і повертається міститься в ньому значення. Значення 1 вказує на True, 0 = на False. ReadBool схожа на Readinteger і ReadString в тому, що всі вони повертають значення, що міститься в зазначеному ідентифікаторі в INI-файлі.

Метод ReadInteger

 






































Уражені об’єкти TIniFile
Призначення Метод Readinteger повертає ціле значення з INI-файла.
Оголошення function Readlnteger(const Section, Ident: string; Default: Longint):
liongint;
Параметри
Section Ім’я розділу, в якому розташований ідентифікатор.
Ident Ідентифікатор, що підлягає зчитування.
Default Значення ідентифікатора за замовчуванням.
Приклад синтаксису
 / / Ця процедура перевіряє ідентифікатор iCountry розділу Inti / / У файлі WIN.INI. Потім встановлюється заголовок форми, / / Указивакщій на те, чи перебуваєте ви в Сполучених Штатах чи ні.
procedure TForm1.FormCreate(Sender: TObject);
var MyIni: TIniFile;
begin MyIni := TIniFile.Create(‘win.ini’);
if MyIni.ReadInteger(‘Intl’, ‘iCountry’, 1) = I then
Form1.Caption := ‘Your are in the Onited States’;
else
Form1.Caption : = ‘Your are not in the United States’;
MyIni.Free;
end;

Опис ReadInteger витягує з ідентифікатора в INI-файлі цілочисельне значення. У наведеному прикладі аналізується ідентифікатор iCountry розділу [Inti] в WIN.INI. Якщо ідентифікатор iCountry встановлений в 1, це означає, що Control Panel Regional Settings встановлені в конфігурацію Сполучених Штатів. ReadInteger схожа на ReadBool і ReadString в тому, що всі вони повертають значення, міститься в зазначеному ідентифікаторі в INI-файлі.

Метод ReadSection


































Уражені об’єкти TIniFile
Призначення Метод ReadSection витягує імена всіх ідентифікаторів заданого розділу в INI-файлі і запам’ятовує їх в строковому об’єкті.
Оголошення procedure ReadSection (const Section: string; Strings: Tstrfngs) ;
Параметри
Section Ім’я читаного розділу.
Strings Список рядків, де стосуватимуться значення.
Приклад синтаксису
 / / Насамперед додамо в форму ListBox. Дана процедура буде / / Друкувати список ідентифікаторів в розділі Desktop файлу / / WIN.INI при створенні форми
procedure TForm1.FormCreate(Sender: TObject);
var MyIni: TIniFile;
begin
MyIni : = TIniFile.Create(‘WIN.INI’);
MyIni.ReadSection(‘Desktop’, ListBox1.Items);
MyIni.Free;
end;

Опис ReadSection витягує імена ідентифікаторів в зазначеному розділі INI-файла і поміщає їх у рядковий об’єкт. Список можна помістити безпосередньо в список строкових компонентів (як у властивість Items вікна списку) або в незалежний список рядків. ReadSection не витягує значення ідентифікаторів, але витягує імена ідентифікаторів. Для витягання ідентифікаторів і їх поточних значень можна використовувати ReadSectionValues. На малюнку 4-2 при допомоги ReadSection відображений типовий розділ INI-файла.

Метод ReadSections






























Уражені об’єкти TIniFile
Призначення Метод ReadSections копіює всі імена розділів в INI-файлі в строковий об’єкт.
Оголошення procedure ReadSections (Strings: TStrings) ;
Параметри
Strings Список імен розділів.
Приклад Синтаксису
 / / Даний обробник події при натисканні кнопки друкує імена / / Розділів INI-файла у вікні списку
procedure TForm1.Button1Click(Sender: TObject);
var MyIni: TIniFile;
begin
ListBox1.Clear;
MyIni := TIniFile.Create(‘test.ini’);
MyIni.ReadSections(listBox1.Items);
MyIni.Free;
end;

Опис Строковий об’єкт є списком рядків, використовуваним компонентами (Такими як вікна списків), яким необхідно маніпулювати з багатьма рядками. ReadSections запам’ятовує список імен розділів INI-файла в параметрі Strings. У наведеному вище прикладі коду даний список передається властивості Items вікна списку, який також має тип TStrings. МАЛЮНОК 4-2 Вікно списку відображає ідентифікатори в розділі [Desktop] файлу WIN.INI.

Метод ReadSectionValues


































Уражені об’єкти TIniFile
Призначення Метод ReadSectionValues витягує з заданого розділу INI-файла всі ключі.
Оголошення procedure ReadSectionValues (const Section: string; Strings; TStrings);
Параметри
Section Ім’я читаного розділу.
Strings Список рядків, в якому запам’ятовуються ідентифікатори та їх значення.
Приклад синтаксису
 / / Насамперед додамо до форми ListBox. Дана процедура буде / / Друкувати список ідентифікаторів і їх значень з розділу / / Desktop файлу WIN.INI при створенні форми
procedure TForm1.FormCreate (Sender: TObject);
var
MyIni: TIniFile;
begin
MyIni := TIniFile.Create(‘WIN.INI’).
MyIni.ReadSectionValues(‘Desktop’, ListBox1.Items);
MyIni.Free;
end;

Опис ReadSectionValues витягує з розділу INI-файла всі ключі і запам’ятовує їх в строковому об’єкті точно так само, як вони з’являються в INI-файлі:

identifier=value

У наведеному вище прикладі у вікні списку відображається весь список (див. рис. 4-3). Використовуючи властивість Values з
TString можна відобразити окремі значення. Або ж можна скопіювати весь розділ в список рядків і отримати доступ до кожного рядка за індексом:

 / / В даному прикладі розділ Desktop файлу WIN.INI зчитується в / / Список рядків і потім в заголовку форми друкується перший / / Рядок. При цьому використовується її індекс.
procedure TForm1.FormCreate (Sender: TObject);
var
MyIni: TIniFile;
MyStringList: TStringList;
begin
MyIni := TIniFile.Create(‘WIN.INI’); / / Отримання примірника списку рядків
MyStringList := TStringList.Create; / / Копіювати розділ в список рядків
MyIni.ReadSectionValues(‘Desktop’, MyStringList); / / Друкувати перший рядок списку в заголовку форми
Form1.Caption := MyStringList.Strings[0];
MyIni.Free;
MyStringList.Free;
end;
Результат показаний на малюнку 4-4.

Метод ReadString






































Уражені об’єкти TIniFile
Призначення Метод ReadString зчитує строкове значення з ідентифікатора в зазначеному розділі INI-файла.
Оголошення function ReadString(const Section, Jdent, Default: string): string;
Параметри
Section Ім’я розділу, в якому розташований ідентифікатор
Ident Ідентифікатор, що підлягає зчитування.
Default Значення ідентифікатора за замовчуванням (повертається, якщо ідентифікатор не знайдено).
Приклад синтаксису
 / / Ця процедура перевіряє ідентифікатор sCountry розділу Intl / / У файлі WIN.INI. Потім встановлюється заголовок форми в значенні / / Ідентифікатора sCountry.
procedure TForm1.FormCreate(Sender: TObject);
var MyIni; TIniFile;
begin
MyIni := TIniFile.Create(‘Win.ini’);
Form1.Caption := MyIni.ReadString(‘Intl’, ‘sCountry’, ‘no country listed’); / / Не забудьте пo завершенні роботи зруйнувати MyIni
MyIni.Free;
end;

Опис ReadString витягує строкове значення з ідентифікатора в INI-файлі. У наведеному вище прикладі програма отримує ідентифікатор з ім’ям sCountry в розділі файлу WIN.INI і друкує його значення в заголовку форми. ReadString схожа на ReadBool і Readinteger в тому, що всі вони повертають значення, що містяться в зазначених ідентифікаторах INI-файла.

МАЛЮНОК 4-3 Вікно списку відображає ідентифікатори та їх значення в розділі [Desktop] файлу WIN.INI.

МАЛЮНОК 4-4 Отримання окремих ідентифікаторів разом зі значеннями та печатку в заголовку форми.

Метод WriteBool






































Уражені об’єкти TIniFile
Призначення Метод WriteBool записує логічне значення в ідентифікатор в зазначеному розділі INI-файла.
Оголошення procedure WriteBool (const Section, Ident: string; Value: Boolean);
Параметри
Section Ім’я розділу, в якому розташований ідентифікатор.
Ident Ідентифікатор, що підлягає запису.
Value Значення, що записується в ідентифікатор.
Приклад синтаксису
 / / Ця процедура створює новий INI-файл з ім’ям TEST.INI / / (Якщо він ще не існує) і додає двоічний ідентифікатор / / SampleBooleanEntry зі значенням True. Якщо ідентифікатора немає, / / Він також буде створений.
procedure TForm1.FormCreate (Sender: TObject);
var
Writeini: TIniFile;
begin
Writeini : = TIniFile.Create(‘TEST.INI’);
Writeini.WriteBool(‘Sample Section’, ‘SampleBooleanEntry’, True);
Writeini.Free;
end;

Опис WriteBool записує в INI-файл логічне значення, задане параметром Value. Розділ і ідентифікатор, куди буде записуватись значення, визначаються параметрами
Section і Ident. Якщо розділ або ідентифікатор не існують, вони створюються. Після запуску наведеного прикладу в каталозі Windows можна буде відкрити новостворений TEST.INI, в якому будуть представлені такі рядки:

[Sample Section]
SampleBooleanEntry=1

WriteBool використовується так само, як Writeinteger і
WriteString, = З єдиною відмінністю в типі записуваного значення.

Метод Writeinteger






































Уражені об’єкти TIniFile
Призначення Метод Writeinteger записує ціле значення в ідентифікатор в зазначеному розділі INI-файла.
Оголошення procedure Writeinteger (const Section, Ident: string; Value: Longint);
Параметри
Section Ім’я розділу, в якому розташований ідентифікатор.
Ident Ідентифікатор, що підлягає запису.
Value Значення, що записується в ідентифікатор.
Приклад синтаксису
 / / Ця процедура створює новий INI-файл з ім’ям TEST.INI / / (Якщо він ще не існує) і додає цілий ідентифікатор / / SampleIntegerEntry зі значенням 12024. Якщо ідентифікатора / / Ні, він також буде створений.
procedure TForm1.FormCreate(Sender: TObject);
var
Writeini: TIniFile;
begin
Writeini := TIniFile.Create(TEST.INI’);
Writeini.Writelnteger( ‘Sample Section’, ‘SampleIntegerEntry’, 12024);
Writeini.Free;
end;

Опис Writeinteger записує в INI-файл ціле значення, задане параметром Value. Розділ і ідентифікатор, куди буде записуватись значення, визначаються параметрами
Section і Ident. Якщо розділ або ідентифікатор не існують, вони створюються. Якщо виконати наведений приклад, в каталозі Windows можна буде відкрити новостворений TEST.INI, в якому знаходяться такі рядки:

[Sample Section]
SampleIntegerEntry=12024
Writeinteger використовується так само, як WriteBool і WriteString, = з єдиним відмінністю в типі записуваного значення.

Метод WriteString






































Уражені об’єкти TIniFile
Призначення Метод WriteString записує строкове значення в ідентифікатор в зазначеному розділі INI-файла.
Оголошення procedure WriteString(const Section, Ident, Value-, string);
Параметри
Section Ім’я розділу, в якому розташований ідентифікатор.
Ident Ідентифікатор, що підлягає запису.
Value Значення, що записується в ідентифікатор.
Приклад синтаксису
 / / Ця процедура створює новий INI-файл з ім’ям TEST. INI / / (Якщо він ще не існує) і додає рядковий / / Ідентифікатор SampleStringEntry зі значенням рядка. Якщо / / Ідентифікатора немає, він також буде створений.
procedure TFonnI.FormCreate (Sender: TObeject);
var
Writeini: TIniFile;
begin
Writeini := TIniFile. Create (‘TEST. INI’),•
Writeini.WriteString(‘Sample Section’, ‘SampleStringEntry’, ‘this
is example of writing a string to an INI file’);
Writeini. Free;
end;

Опис WriteString записує в INI-файл строкове значення, задане параметром Value. Розділ і ідентифікатор, куди буде записуватись значення, вказуються параметрами Section і Ident. Якщо розділ або ідентифікатор не існують, вони створюються.

Після виконання наведеного прикладу в каталозі Windows можна буде відкрити новостворений TEST.INI, в якому представлені такі рядки:


[Sample Section]
SamplectringEntry=this is example of writing a string to an INI file WriteString використовується так само, як WriteBool і Writeinteger, – з єдиною різницею в типі записуваного значення.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*