Remplir un stringgrid avec un memo

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 279 fois - Téléchargée 32 fois

Contenu du snippet

Pour remplir un StringGrid grace un memo

Il suffit d'un StringGrid(ici appelé StringGrid1) et d'un memo(Memo1)

Cet exemple est fait pour un tableau de 3 collones et d'une infinité de lignes.
Vous pouver l'adapter pour un plus de colonnes en changant la ligne if c=3 then ou le 3 défini le nombre de collones

Source / Exemple :


procedure TForm1.RemplirTableau();
var z,c,l : integer;
begin
  z:= memo1.lines.Count DIV 3;
  StringGrid1.RowCount := z+1;
  c:=0;
  l:=0;
  z:=0;
  repeat;
    StringGrid1.cells[c,l]:=memo1.lines[z];
    z:=z+1;
    c:=c+1;
    if c=3 then
    begin
      c:=0;
      l:=l+1;
    end;
  until l=z+1;
end;

Conclusion :


Voila c'est tout con mais ca marche.

A voir également

Ajouter un commentaire Commentaires
until l =StringGrid1.RowCount; pas until l=z+1;
Messages postés
2
Date d'inscription
mercredi 7 avril 2010
Statut
Membre
Dernière intervention
17 avril 2010

merci a vous A+++++++++++
Messages postés
1
Date d'inscription
lundi 19 novembre 2007
Statut
Membre
Dernière intervention
31 mai 2008

merci Moricio
Messages postés
1
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
24 octobre 2004

euuuuh

je trouve que c'est bien compliqué pour ce que ca doit faire...

Bon deja on ENLEVE le 'l' des noms de variables, vu qu'on peut le confondre avec un 1, ... ce qui facilite ni la lecture d'un code ni sa comprehension.

Ensuite c := c+1;
ca peut s'ecrire inc(c);
C'est censé etre un poil plus rapide en execution... mais bon maintenant on est plus à ça prêt...

Ensuite plutot que de se casser la tete, on peut utiliser deux boucle 'for' imbriqués, en prenant le probleme a l envers.

for i... for j... stringgrid[i,j] := memo1.lines[i*3+j]

enfin si on veut utiliser qu'une boucle, y a plus élégant:

const t=3; // nbre de colonnes - on peut le specifier en parametre de la procedure aussi.
var 
 i : integer; // compteur
begin
   StringGrid1.RowCount:= memo1.lines.Count div t +1;
   for i:= 0 to memo1.lines.count-1 
   do StringGrid1.cells[i div t,i mod t] := memo1.lines[i];
// on peut intervertir 'div' et 'mod' suivant le sens que l on souhaîte, mod etant le reste de la division entiere.
end;
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
C' est sûr qu' en mettant :
until l=5;
ton code va s' arreter à la ligne 5!

fait plutôt :
z:= memo1.lines.Count div 3;
StringGrid1.RowCount := z+1;
c:=0;
l:=0;
z:=0;
for z := 0 to memo1.lines.count - 1 do
begin
StringGrid1.cells[c,l]:=memo1.lines[z];
c:=c+1;
if c=3 then
begin
c:=0;
l:=l+1;
end;
end;

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.