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

Messages postés
3
Date d'inscription
samedi 2 février 2019
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
Afficher la suite 

Votre réponse

3 réponses

Messages postés
425
Date d'inscription
samedi 17 mai 2003
Dernière intervention
3 février 2019
15
0
Merci
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.
sofiene2019
Messages postés
3
Date d'inscription
samedi 2 février 2019
Dernière intervention
3 février 2019
-
mille merci pour votre aide c ce que je cherche
Commenter la réponse de korgis
Messages postés
425
Date d'inscription
samedi 17 mai 2003
Dernière intervention
3 février 2019
15
0
Merci
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 ! ^^
Commenter la réponse de korgis
Messages postés
3
Date d'inscription
samedi 2 février 2019
Dernière intervention
3 février 2019
0
Merci
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
Commenter la réponse de sofiene2019

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.