Recuperer valeur du fichier INI pour listbox

Résolu
sofiene2019 Messages postés 3 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 3 février 2019 - Modifié le 2 févr. 2019 à 17:39
sofiene2019 Messages postés 3 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 3 février 2019 - 3 févr. 2019 à 13:38
Bonjour,
Version delphi10
Je crée une application qui contient 4 listboxes aux quels on introduit des dates puis j'enregistre le contenu de ces listboxes dans un fichier ini
le code utilisé est

procedure TForm1.Button5Click(Sender: TObject);
var

F : TIniFile;
i : integer; // variable nécessaire



begin
SaveDialog1.InitialDir := 'C:\MyProjects';

if SaveDialog1.Execute then
begin
F:=TIniFile.Create(SaveDialog1.FileName+'.ini');
try
for i:=0 to listbox1.Items.Count-1 do F.WriteString('Liste1','',listbox1.Items[i]);
for i:=0 to listbox2.Items.Count-1 do F.WriteString('Liste2',Format('ligne%d',[i]),listbox2.Items[i]);
for i:=0 to listbox3.Items.Count-1 do F.WriteString('Liste3',Format('ligne%d',[i]),listbox3.Items[i]);
for i:=0 to listbox4.Items.Count-1 do F.WriteString('Liste4',Format('ligne%d',[i]),listbox4.Items[i]);
finally
F.UpdateFile;

end;
end;

end;


je crée aussi une boutton pour charger le contenu de listboxes enregistré (les dates) mais je n'ai pas pu mettre le code exacte

voila une capture du fichier ini


j'ai cherché pdt plusieurs heures sans résultat
merci pour votre aide

3 réponses

korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
Modifié le 3 févr. 2019 à 17:06
Salut,

Tu peux écrire le nombre d'items de chaque ListBox dans le fichier ini.
Pour la lecture, la boucle mise en oeuvre utilisera ce compteur pour remplir chaque ListBox.
Pour être plus clair, voici un exemple qui reprend les éléments de ton code.

Écriture dans le fichier :

procedure TForm1.Button1Click(Sender: TObject);
var
  F: TIniFile;
  i: Integer;
begin
  SaveDialog1.InitialDir := 'C:\MyProjects';
  if SaveDialog1.Execute then
  begin
    F := TIniFile.Create(SaveDialog1.FileName + '.ini');
    try
      F.WriteInteger('Liste1', 'CountItems', ListBox1.Items.Count);
      for i := 0 to ListBox1.Items.Count - 1 do
        F.WriteString('Liste1', Format('ligne%d', [i]), ListBox1.Items[i]);

      F.WriteInteger('Liste2', 'CountItems', ListBox2.Items.Count);
      for i := 0 to ListBox2.Items.Count - 1 do
        F.WriteString('Liste2', Format('ligne%d', [i]), ListBox2.Items[i]);

      F.WriteInteger('Liste3', 'CountItems', ListBox3.Items.Count);
      for i := 0 to ListBox3.Items.Count - 1 do
        F.WriteString('Liste3', Format('ligne%d', [i]), ListBox3.Items[i]);

      F.WriteInteger('Liste4', 'CountItems', ListBox4.Items.Count);
      for i := 0 to ListBox4.Items.Count - 1 do
        F.WriteString('Liste4', Format('ligne%d', [i]), ListBox4.Items[i]);
    finally
       F.Free;
    end;
 end;
end;

Lecture depuis le fichier :

procedure TForm1.Button2Click(Sender: TObject);
var
  F: TIniFile;
  i: Integer;
  CountItems: Integer;
begin
  OpenDialog1.InitialDir := 'C:\MyProjects';
  if OpenDialog1.Execute then
  begin
    F := TIniFile.Create(OpenDialog1.FileName);
    try
      CountItems := F.ReadInteger('Liste1', 'CountItems', 0);
      for i := 0 to CountItems - 1 do
        ListBox1.Items.Add(F.ReadString('Liste1', Format('ligne%d', [i]), ''));

      CountItems := F.ReadInteger('Liste2', 'CountItems', 0);
      for i := 0 to CountItems - 1 do
        ListBox2.Items.Add(F.ReadString('Liste2', Format('ligne%d', [i]), ''));

      CountItems := F.ReadInteger('Liste3', 'CountItems', 0);
      for i := 0 to CountItems - 1 do
        ListBox3.Items.Add(F.ReadString('Liste3', Format('ligne%d', [i]), ''));
        
      CountItems := F.ReadInteger('Liste4', 'CountItems', 0);
      for i := 0 to CountItems - 1 do
        ListBox4.Items.Add(F.ReadString('Liste4', Format('ligne%d', [i]), ''));
    finally
       F.Free;
    end;
 end;
end;


Et n'oublie pas de libérer le fichier ini !
Bon courage.
0
sofiene2019 Messages postés 3 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 3 février 2019
3 févr. 2019 à 09:52
mille merci pour votre aide c ce que je cherche
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
Modifié le 3 févr. 2019 à 17:07
Oui, ce code fonctionne parfaitement.

Néanmoins, il existe une manière plus simple de parvenir au but (je n'y ai pas pensé de suite, n'ayant pas travaillé sur les fichiers ini depuis longtemps).

Je te conseille de regarder l'aide en ligne de Delphi concernant "TInifile", en particulier les méthodes "ReadSections" et "ReadSection".

Voici ce que ça donne :

procedure TForm1.Button2Click(Sender: TObject);
var
  F: TIniFile;
begin
  OpenDialog1.InitialDir := 'C:\MyProjects';
  if OpenDialog1.Execute then
  begin
    F := TIniFile.Create(OpenDialog1.FileName);
    try
      F.ReadSection('Liste1', ListBox1.Items);
      F.ReadSection('Liste2', ListBox2.Items);
      F.ReadSection('Liste3', ListBox3.Items);
      F.ReadSection('Liste4', ListBox4.Items);
    finally
      F.Free;
    end;
 end;
end;


ou alors, de manière plus élégante :

procedure TForm1.Button2Click(Sender: TObject);
begin
  OpenDialog1.InitialDir := 'C:\MyProjects';
  if OpenDialog1.Execute then
  begin
    with TIniFile.Create(OpenDialog1.FileName) do
    try
      ReadSection('Liste1', ListBox1.Items);
      ReadSection('Liste2', ListBox2.Items);
      ReadSection('Liste3', ListBox3.Items);
      ReadSection('Liste4', ListBox4.Items);
    finally
      Free;
    end;
 end;
end;


C'est finalement plus simple ! ^^
0
sofiene2019 Messages postés 3 Date d'inscription samedi 2 février 2019 Statut Membre Dernière intervention 3 février 2019
3 févr. 2019 à 13:38
votre code est parfait
Il me reste un seul souci c comment empecher un item d'une listbox de se répéter dans un autre listbox

merci infinémént
0
Rejoignez-nous