ListBox w INI

vecco

Poniżej przedstawione zostały funkcje, które mogą posłużyć do zapisania i odczytania elementów komponentu ListBox do wybranej sekcji pliku INI.

Zapis:

uses IniFiles;

//Parametry:
//  FileName: nazwa pliku INI, w którym elementy zostaną zapisane
//  Section: sekcja, w której wartości zostaną zapisane
//  ListBox: komponent, z którego elementy zostaną zapisane
//
//Funkcja zwraca wartość logiczną, oznaczającą powodzenie zapisu.
//Podczas zapisywania elementów, usuwa całą poprzednią zawartość sekcji pliku INI.

function WriteToIni(const FileName:TFileName; const Section:string; const ListBox:TListBox):boolean;
var IniFile:TIniFile;
    i:integer;
begin
result:=TRUE;
IniFile:=TIniFile.Create(FileName);
try
  IniFile.EraseSection(Section);
  for i:=0 to ListBox.Items.Count-1 do
    IniFile.WriteString(Section, IntToStr(i), ListBox.Items[i]);
except
  result:=FALSE;
  IniFile.Free;
  end;
end;

Odczyt:

uses IniFiles;

//Parametry:
//  FileName: nazwa pliku INI, z którego elementy zostaną odczytane
//  Section: sekcja, z której wartości zostaną odczytane
//  ListBox: komponent, do którego elementy zostaną odczytane
//
//Funkcja zwraca wartość logiczną, oznaczającą powodzenie odczytu.
//Podczas odczytywania elementów usuwa całą poprzednią zawartość ListBox.

function ReadFromIni(const FileName:TFileName; const Section:string; const ListBox:TListBox):boolean;
var IniFile:TIniFile;
    i:integer;
begin
result:=TRUE;
IniFile:=TIniFile.Create(FileName);
ListBox.Items.BeginUpdate;
ListBox.Items.Clear;
try
  i:=0;
  while IniFile.ValueExists(Section, IntToStr(i)) do
    begin
    ListBox.Items.Insert(i, IniFile.ReadString(Section, IntToStr(i), ''));
    inc(i);
    end
except
  result:=FALSE;
  IniFile.Free;
  end;
ListBox.Items.EndUpdate;
end;

4 komentarzy

Szczawik wiesz jak dla mnie super, bez żadnych wodotrysków, skondensowane i praktyczne, wielkie dzięki !!!

Spoko - a tak na poważnie, jak piszesz artykuł czy jakiś inny tekst, to zadbaj o jego formę i treść. W przypadku twojego dzieła, ani do jednego, ani drugiego nie przyłożyłeś żadnej wagi.

Po pierwsze, po co zapisywać ilość elementów w pliku, skoro jesteś w stanie ją odczytać z niego samego, po drugie, po twoim zapisie zostaje śmietnik w pliku, bo jeśli chwilę wcześniej zapisałeś 9 elementów, a potem 3, to w pliku będzie zapisanych 9: 0-2 nowe, a 3-8 stare; tylko dodatkowo licznik się zmieni. No zupełnie bez sensu. Natworzyłeś też jakieś zmienne pomocnicze, bóg wie komu potrzebne (yy, x, s); sam licznik dla pętli wystarczy. Poza tym to dział gotowce, a nie FAQ, więc pisz teksty w takiej postaci, jak się robi gotowce, a nie objaśnianie osobno tworzenia sekcji, osobno zapisu, osobno wszystkiego.

Pamiętaj: jakość i treść. Przede wszystkim.

Szczawik .... No wielkie dzięki ... :|

"Nie jest to najlepszy sposób odczytu i zapisu wartości z ListBoxa do INI ... " - To po co to w ogóle?