Recuperer valeur du fichier INI pour listbox [Résolu]

Signaler
Messages postés
3
Date d'inscription
samedi 2 février 2019
Statut
Membre
Dernière intervention
3 février 2019
-
Messages postés
3
Date d'inscription
samedi 2 février 2019
Statut
Membre
Dernière intervention
3 février 2019
-
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

Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
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.
Messages postés
3
Date d'inscription
samedi 2 février 2019
Statut
Membre
Dernière intervention
3 février 2019

mille merci pour votre aide c ce que je cherche
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
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 ! ^^
Messages postés
3
Date d'inscription
samedi 2 février 2019
Statut
Membre
Dernière intervention
3 février 2019

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