Plik INI i odczyt checkboxów WSZYSTKICH

0

Witam

//ZAPISZ
procedure TForm3.Button1Click(Sender: TObject);
Var
  ini: TINIFile;
begin
  ini := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'cols.ini');
  try
  ini.WriteBool('ulica', 'pokaz1', CheckBox5.Checked);
  
  ini.WriteBool('miejscowosc', 'pokaz2', CheckBox6.Checked);

  ini.WriteBool('email', 'pokaz3', CheckBox7.Checked);
  finally
  ini.free;


end;
end;

//CZYTAJ 
procedure TForm3.Button2Click(Sender: TObject);
var
ini: TINIFile;
begin
//ustawienia kolumn kursanta
//if Fileexists(ExtractFilePath(Application.ExeName) + 'cols.ini') then
 ini := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'cols.ini');
  try
  Form3.CheckBox5.Checked := ini.readbool('ulica','pokaz1',True);

  Form3.CheckBox6.Checked := ini.readbool('miejscowosc','pokaz2',True);

  Form3.CheckBox7.Checked := ini.readbool('email','pokaz3',True);
  finally
  ini.free;
end;

Dlaczego ten kod odczytuje mi tylko jednego Checkboxa zamiast trzech? Zapisuje wszystkie. Zawsze tak robiłem, a teraz coś jest nie tak. :/

0

Dlaczego ten kod odczytuje mi tylko jednego Checkboxa zamiast trzech?

To znaczy ?

Tylko jeden się zaznacza ?

0

Tak, tylko jeden zaznacza.

Spróbuję z pętelką jakąś.
Google już przesiałem chyba całe... :)

0

zajrzyj do pliku, moze jest "rąbnięty".... moze wpisales tam stringa z enterem i on rozqalil plik...?

0

Nie, nie. Usuwałem plik ini, gdy coś zmieniałem w kodzie. Wszystko było OK. Ogólnie struktura pliku była poprawna, nigdzie nie było spacji, enterów itd. :)
Rozwiązałem to dając prockę od zapisu do Clicku każdego Checkboxa i teraz działa masowy odczyt. :-)

0

Bez sensu. Ja bym to zrobił tak, jak poniżej i kod działa. chociaż najlepiej było by zrobić sekcje [Pokzuj]
i w niej zapisywać trzy wartości ulica, miejscowosc oraz email. Sposób na czytanie booleanów zrobilem w
taki sposób jak zrobiłęm, żeby mieć pewność że wszystko będzie ok kiedy zamiast 0 lub 1 ktoś wpisze na
przykład literę przy ręcznym grzebaniu w pliku ini. Bo z tego, co sprawdziłem wtedy domyślnie jest True.

// Zapis
var
  Sciezka : string;
  PlikIni : TIniFIle;
begin
  Sciezka := ExtractFilePath(Application.ExeName);
  PlikIni := TIniFIle.Create(Sciezka + 'plik.ini');
  try
    PlikIni.WriteBool('Pierwzy', 'Pokaz', CheckBox1.Checked);
    PlikIni.WriteBool('Drugi', 'Pokaz', CheckBox2.Checked);
    PlikIni.WriteBool('Trzeci', 'Pokaz', CheckBox3.Checked);
  finally
    PlikIni.Free;
  end;
end;

// Odczyt
var
  S, Sciezka : string;
  PlikIni : TIniFIle;
begin
  Sciezka := ExtractFilePath(Application.ExeName);
  PlikIni := TIniFIle.Create(Sciezka + 'plik.ini');
  try
    S := PlikIni.ReadString('Pierwzy', 'Pokaz', '');
    CheckBox1.Checked := S = '1';
    S := PlikIni.ReadString('Drugi', 'Pokaz', '');
    CheckBox2.Checked := S = '1';
    S := PlikIni.ReadString('Trzeci', 'Pokaz', '');
    CheckBox3.Checked := S = '1';
  finally
    PlikIni.Free;
  end;
end;
0

Spoko, na sekcjach też mogłem zrobić.
Ogólnie Checkboxów jest 28. ;)
Dzięki za kod.

0

To jak są sensowne i kolejno ponazywane z dopiskiem od 1 do 28 i wszystkie chcesz mieć
zapisane do ini to proponuje to zrobić do jednej sekcji z Identem o nazwie od 1 do 28, no
a później przy wczytywaniu i zapisywaniu pętla - z wykorzystaniem Self.FindComponent.

0

jak po findcomponent to mozna jakos sensownie nazwac chceckboxy i pozniej uzywac ich nazwy jako nazwy sekcji czy tam pol, nie wiem jak to sie nazywa...
btw.. czy jest sens brac readBool (ReadString) w try..except? readbool chyba nie moze wywalic zadnego bledu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1