Programowanie w języku Delphi » Gotowce

ListBox w INI

  • 2006-11-03 18:54
  • 4 komentarze
  • 1202 odsłony
  • Oceń ten tekst jako pierwszy
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 komentarze

keinxor 2006-11-03 20:19

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

Szczawik 2006-11-03 19:23

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.

vecco 2006-11-03 18:56

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

konik 2006-11-03 17:47

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