Remplir un stringgrid avec un memo

3/5 (5 avis)

Snippet vu 9 682 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;
medbtt Messages postés 2 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 avril 2010
17 avril 2010 à 20:34
merci a vous A+++++++++++
cs_julverne Messages postés 1 Date d'inscription lundi 19 novembre 2007 Statut Membre Dernière intervention 31 mai 2008
31 mai 2008 à 18:17
merci Moricio
cs_esby Messages postés 1 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 24 octobre 2004
24 oct. 2004 à 04:40
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;
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
28 juin 2004 à 18:50
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.