INI



Jeśli niechcemy korzystać z rejestru do zapisania pewnych ustawień możemy użyć plików Ini.

OBSŁUGA

Najpierw musimy dodać moduł IniFiles do sekcji uses. Następnie deklarujemy zmienną np.

var
  Ini : TIniFile;
Teraz pora stworzyć obiekt:

 Ini := TIniFile.Create(NazwaPlikuIni);
Zwolnienie zasobów to:

 Ini.Free;
Prawidłowy blok kodu, korzystającego z pliku Ini powinien wyglądać tak:
 Ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Ustawienia.ini'); 
 // tworzymy plik Ini w katalogu z aplikacją pod nazwą Ustawienia.Ini
 try                                                                         
  // tu odczytujemy, zapisujemy w pliku
 finally
   Ini.Free;  // zwolnij zasoby
 end;

Pozwala nam to uniknąć nieciekawych sytuacji, gdyby odczyt/zapis danych nie przebiegł poprawnie nasz kod nie będzie powodował tzw. memory leak'ów.

ODCZYT / ZAPIS

Najpierw struktura pliku Ini. Otóż przykładowo może wyglądać tak:

[Sekcja]
Nazwa=Wartość
InnaNazwa=Wartość
[InnaSekcja]
Nazwa=Wartość
ZupełnieInnaNazwa=InnaWartość

Widać więc, że mamy podział na sekcje zawierające wartości, do których mamy przypisane nazwy. Odczyt danych to:

ZmiennaBoolean := Ini.ReadBool(Sekcja, Nazwa, WartośćDomyślnaBoolean);
ZmiennaDatetime := Ini.ReadDate(Sekcja, Nazwa, WartośćDomyślnaDateTime);
ZmiennaDatetime := Ini.ReadDateTime(Sekcja, Nazwa, WartośćDomyślnaDateTime);
ZmiennaFloat := Ini.ReadFloat(Sekcja, Nazwa, WartośćDomyślnaFloat);
ZmiennaInteger := Ini.ReadInteger(Sekcja, Nazwa, WartośćDomyślnaInteger);
ZmiennaString := Ini.ReadString(Sekcja, Nazwa, WartośćDomyślnaString);
ZmiennaDatetime := Ini.ReadTime(Sekcja, Nazwa, WartośćDomyślnaDateTime);

WartośćDomyślnaXXX oznacza wartość, która zostanie przypisana wartości zwracanej przez funkcję w wypadku gdyby, nie możnabyło odczytać tej wartości z pliku Ini. Zapis wygląda podobnie:

Ini.WriteBool(Sekcja, Nazwa, WartośćBoolean);
Ini.WriteDate(Sekcja, Nazwa, WartośćDateTime);
Ini.WriteDateTime(Sekcja, Nazwa, WartośćDateTime);
Ini.WriteFloat(Sekcja, Nazwa, WartośćFloat);
Ini.WriteInteger(Sekcja, Nazwa, WartośćInteger);
Ini.WriteString(Sekcja, Nazwa, WartośćString);
Ini.WriteTime(Sekcja, Nazwa, WartośćDateTime);

Jeśli chcemy sprawdzić czy dana sekcja istnieje w pliku Ini to

 if Ini.SectionExists(Sekcja) then ....
Do sprawdzenia czy istnieje wartość dla danej nazwy w określonej sekcji

 if Ini.ValueExists(Sekcja, Nazwa) then ....
Usunięcie Nazwy wraz z jej wartością

 Ini.DeleteKey(Sekcja, Nazwa);
Aby usunąć całą sekcję z pliku używamy

 Ini.EraseSection(Sekcja);
Gdy niewiemy jakie mamy sekcje w pliku to najpierw deklarujemy

var
  Lista : TStringList;
potem tworzymy

 Lista := TStringList.Create;
wkońcu odczytujemy sekcje

 Ini.ReadSections(Lista);
lub nazwy wartości w sekcji

 Ini.ReadSection(Sekcja, Lista);
czy też wartości w sekcji

 Ini.ReadSectionValues(Sekcja, Lista);

na koniec możemy to wpisać do Memo
 Memo1.Lines := Lista;
ostatecznie zwalniamy
 Lista.Free;
Jeśli zapomnieliśmy w jakim pliku Ini operujemy możemy to sprawdzić
 NazwaPliku := Ini.FileName;
Jak widać pliki Ini nie są głupią sprawą i warto znać ich obsługę, która i tak nie jest specjalnie skomplikowana.





...powrót