Enregistrer et relire un tstringgrid avec un fichier .ini

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 886 fois - Téléchargée 37 fois

Contenu du snippet

C'est suite à une question du forum.

Voici deux procédures qui permettent d'enregistrer un TStringGrid dans un fichier .INI. La taille de la grille est aussi enregistrée. Ce qui permet d'adapter la taille de la grille à la relecture du fichier.

Pour enregistrer une grille : SauveGrille('C:\TEMP\ESSAI.INI',StringGrid1);
Pour relire une grille : LectureGrille('C:\TEMP\ESSAI.INI',StringGrid1);

Il est aussi possible d'enregistrer automatiquement une grille dans le OnDestroy d'une fiche et de la relire dans le OnCreate à l'aide de ces procédures.

Source / Exemple :


Procedure SauveGrille(NomFichier:String;Grille:TStringGrid);
Var Ini:TIniFile;
    i,j:Integer;
begin
  Ini:=TIniFile.Create(NomFichier);
  With Grille Do Try
    Ini.WriteInteger('GENERAL','RowCount',RowCount);
    Ini.WriteInteger('GENERAL','ColCount',ColCount);
    For i:=0 To ColCount-1 Do For j:=0 To RowCount-1 Do
      Ini.WriteString(IntToStr(i),IntToStr(j),Cells[i,j]);
  Finally
    Ini.Free;
  End;
End;

Procedure LectureGrille(NomFichier:String;Grille:TStringGrid);
Var Ini:TIniFile;
    i,j:Integer;
begin
  Ini:=TIniFile.Create(NomFichier);
  With Grille Do Try
    If INI.ValueExists('GENERAL','RowCount')And
       INI.ValueExists('GENERAL','ColCount')
    Then Begin
      RowCount:=Ini.ReadInteger('GENERAL','RowCount',RowCount);
      ColCount:=Ini.ReadInteger('GENERAL','ColCount',ColCount);
      For i:=0 To ColCount-1 Do For j:=0 To RowCount-1 Do
        Cells[i,j]:=Ini.ReadString(IntToStr(i),IntToStr(j),'');
    End;
  Finally
    Ini.Free;
  End;
End;

Conclusion :


Cette source et quelques autres sur : http://nono40.developpez.com

A voir également

Ajouter un commentaire Commentaires
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
Dans le cas d'un fichier INI de plus de 64 Ko, il faudra donc utiliser ta méthode, mais j'aimerais avoir un copie d'écran d'un TStringGrid contenant plus de 64Ko de texte...
On peut aussi réduire la taille du fichier ini en n'enregistrant pas les cases vides si la grille en contient beaucoup :
for i:=0 to ColCount-1 do for j:=0 to RowCount-1 do
If Cells[i,j]<>'' Then Ini.WriteString(IntToStr(i),IntToStr(j),Cells[i,j]);
La lecture n'est pas changée, car la chaine vide est la valeur par défaut.

Quant aux objets associée, il n'est pas facile de faire une procédure générique vu que Objects peut être de n'importe quel type y compris un Integer transtypé...
Messages postés
833
Date d'inscription
dimanche 6 janvier 2002
Statut
Membre
Dernière intervention
3 novembre 2005
1
Et les droits d'auteurs ?!! lol
Voilà une bonne mise en pratique !
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Félicitations pour ce code 100% efficace.
Comme quoi la classe TIniFile peut servir à plein de choses inattendues et a encore de beaux jours devant elle !
Rappelons toutefois la limitation de taille des fichiers à 64 Ko et que les objets liés aux cellules de la grille ne seront pas sauvegardés par ce procédé. Mais là, c'est autrement plus complexe.

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.