DevProg: Блог за програмисти

Тайни на програмирането. Примери за развитие. Прегледи на софтуер за програмиране, блогове и форуми и просто полезни съвети!

Да работя с .INI файлове в Делфи много просто. Основният основен клас за работа с тях е TIniFile, което ви позволява да извършвате върху тях всички операции по писане и четене, презаписване на потребителски настройки. Има и клас TMemIniFile, което е различно от първото TIniFile, от факта, че всички данни се записват в RAM паметта на компютъра и се съхраняват на диска само по време на разговора UpdateFile метод. И двата класа се съдържат в модула IniFile и за да можем да използваме .INI файлове и да работите с тези класове във вашите приложения, трябва да добавите модула IniFiles към раздела Употреби.

Много е лесно да създадете обект от класа TIniFile или TMemIniFile, за това трябва да предадете името на .INI файла на конструктора. Ако този файл не съществува, той се създава автоматично. Има методи за четене/запис от/в .INI файл на дефинирани от потребителя стойности програмно

Достатъчно теория, сега нека се опитаме да практикуваме и напишем малко приложение, което ясно демонстрира как се работи с файлове за инициализация в Delphi и клас TIniFile. След стартирането нашето приложение чете от файла .INI информация за позицията и размера на прозореца, както и съдържанието на полето за редактиране на Редактиране и когато затворим приложението, то ще напише новите си във файла .INI ( ако сме променили размера на прозореца или сме написали нещо в полето за въвеждане) данните, с които ще се отвори следващия път.

Отворете Delphi, поставете върху формуляра компонентите Редактиране (поле за въвеждане) и Бутон (обикновен бутон). Ще обработваме събитията на компонента Form, основния формуляр, когато OnCreate е създаден и OnClose е затворен, както и събитията при натискане на бутона OnClick.

Добавете модула IniFile към раздела за приставки Uses, който съдържа класа TIniFile, с който ще работи нашето приложение.

В самото начало на програмата (в тялото на манипулатора на събитие за създаване на формуляр OnCreate), ние ще се опитаме да прочетем данни от .INI файла. За да приложим това, нека създадем обект от класа TIniFile, като извикаме конструктора му с името на необходимия файл. Ще получим името на файла от името на изпълнимия файл на приложението Application.ExeName, като променим разширението му на „ini“ с помощта на функцията ChangeFileExt.

Ще извлечем отделни стойности от .INI файла, като използваме методите ReadInteger, ReadString и ReadBool. Тези функции имат 3 аргумента

  1. Четене/запис * (име на тип данни Integer, String или Bool) * (1N, 2N, 3N);
  2. 1N - първият аргумент, името на раздела, в нашия случай това ще бъде Форма
  3. 2N - втори аргумент, име на параметър (отгоре, отляво, текст и т.н.)
  4. 3N - третият аргумент, указва стойността по подразбиране (100, 200, 300 и т.н.), ако се използва Read *, в случай на Write * write, това ще бъде стойността, която трябва да се запише.

Възможно е да не успеем да извлечем стойности от .INI файла не само при спешни случаи, но и поради няколко причини, например отсъствието на инициализационен файл или раздел. Следователно, за да се справим с подобни или дори по-сериозни грешки, ще използваме защитения блок опитвам ... накрая .

процедура TForm1.FormCreate (Изпращач: TObject);
вар
IniSoub: TIniFile;
започнете
Надпис: = ‘* .INI’;
Button1.Caption: = '& Запазване'
Edit1.Text: = ";
// създаване на обект от класа TIniFile
IniSoub: = TIniFile.Create (ChangeFileExt (Application.ExeName, ‘.ini’));
опитайте // опитайте да прочетете данни
Edit1.Text: = IniSoub.ReadString (‘Edit’, ‘Text’, ”);
Top: = IniSoub.ReadInteger (‘Form’, ‘Top’, 100);
Вляво: = IniSoub.ReadInteger (‘Форма’, ‘Вляво’, 100);
Височина: = IniSoub.ReadInteger (‘Форма’, ‘Височина’, 100);
Ширина: = IniSoub.ReadInteger (‘Форма’, ‘Wedth’, 147);
IF IniSoub.ReadBool ('Form', 'Maximized', false) тогава
WindowState: = wsMaximized
друго
WindowState: = wsNormal;
накрая
IniSoub.Free; // свободна памет
край;
край;

процедура TForm1.Button1Click (Изпращач: TObject);
започнете
Близо;
край;

Когато затворим програмата, събитието за затваряне на формуляр OnClose ще бъде обработено и ще напише текущите стойности (височина, размер на прозореца и т.н.) във файла за инициализация, използвайки методите на класа TIniFile:

WriteString ()
WriteInteger ()
WriteBool ()

Разгледахме ги по-горе, в Write * всичко е същото като в Read *, с изключение на последния 3 аргумент, който записва някаква числова стойност във файла .INI.

процедура TForm1.FormClose (Изпращач: TObject; var Действие: TCloseAction);
вар
IniSoub: TIniFile;
започнете
// създаване на обект от класа TIniFile
IniSoub: = TIniFile.Create (ChangeFileExt (Application.ExeName, ‘.ini’));
опитайте // опитваме се да запишем данни в нашия .INI файл
IniSoub.WriteString (‘Edit’, ‘Text’, Edit1.Text);
IniSoub.WriteInteger ('Форма', 'Горе', Горе);
IniSoub.WriteInteger (‘Форма’, ‘Ляво’, Ляво);
IniSoub.WriteInteger (‘Форма’, ‘Височина’, Височина);
IniSoub.WriteInteger (‘Форма’, ‘Ширина’, Ширина);
IniSoub.WriteBool ('Форма', 'Максимизирано', WindowState = wsMaximized);
накрая
IniSoub.Free; // свободна памет
край;
край;

Сега компилирайте приложението и го запазете някъде в папка или на вашия работен плот. Отворете го и опитайте да промените, например, размера на прозореца му, позицията му на вашия монитор и щракнете върху бутона "Запазване". Сега го отворете отново и можете да се уверите, че размерът на прозореца и останалите, които сте променили, се показват в същия размер. Всички тези данни са във .INI файла, можете да го отворите и редактирате, като по този начин промените някои стойности, с които ще се показва приложението, как го отваряте.

Ето списъка му

Не забравяйте, когато редактирате .INI файла ръчно, за да посочите имената на секциите в квадратни скоби [….], А всички останали редове на файла трябва да имат формат =

Ако искате да предоставите възможност за редактиране на .INI файлове чрез самата програма, можете да използвате компонента ValueListEditor, с раздели Допълнителен.