À L'AIDE.... LOOPER DANS UN TSTRINGGRID

divadav Messages postés 94 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009 - 25 oct. 2004 à 17:45
cs_bazole Messages postés 37 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 13 novembre 2005 - 25 oct. 2004 à 18:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/27075-a-l-aide-looper-dans-un-tstringgrid

cs_bazole Messages postés 37 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 13 novembre 2005
25 oct. 2004 à 18:12
Normalement tu doit utiliser le forum pour obtenir une aide.

Le plus simple, c'est de sortir la variable "ligne" de ta procédure pour qu'elle conserve sa valeur après chaque appel. Tu peu la déclarer dans la partie implémentation : voir ci dessous

-----------------------------
implementation

{$R *.dfm}

var ligne: integer = 0;
-----------------------------

Ensuite tu modifie ta procédure Button1Click en la simplifiant :

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
with StringGrid1 do
begin
Inc(ligne);
cells[1,ligne]:=edit1.Text;
cells[2,ligne]:=edit2.Text;
cells[3,ligne]:=edit3.Text;
cells[4,ligne]:=edit4.Text;
end;
end;

bazole
divadav Messages postés 94 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009 2
25 oct. 2004 à 17:45
Ben non, ça peu pas marcher.... ;-p

La boucle "FOR" est mauvaise...
Et la variable LIGNE doit être globale, ce qui veut dire que tu ne dois pas la déclarer dans la fonction, mais bien avant dans le code...

Au final, la fonction du bouton donne ça :
====================================
procedure TForm1.Button1Click(Sender: TObject);
begin
with StringGrid1 do begin
Rows[ligne].clear;
cells[1,ligne]:=edit1.Text;
cells[2,ligne]:=edit2.Text;
cells[3,ligne]:=edit3.Text;
cells[4,ligne]:=edit4.Text;
end;

Inc(ligne);

end;
================================

Et la variable Ligne est déclarée ici :
================================
var
Form1: TForm1;
ligne: Integer;

implementation
================================

Ce qui donne :
================================
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Edit4: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;
ligne: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

with StringGrid1 do begin
Cells[1,0] := 'Colonne 1';
Cells[2,0] := 'Colonne 2';
Cells[3,0] := 'Colonne 3';
Cells[4,0] := 'Colonne 4';
end;

Inc(ligne);


end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with StringGrid1 do begin // Point d'arrêt (cf ci-dessous)
Rows[ligne].clear;
cells[1,ligne]:=edit1.Text;
cells[2,ligne]:=edit2.Text;
cells[3,ligne]:=edit3.Text;
cells[4,ligne]:=edit4.Text;
end;

Inc(ligne);

end;


end.
=================================

Voilà voilou !!

Et quand tu as un problème comme ça que tu ne comprends pas, tu peux suivre ta boucle en mettant un point d'arrêt : tu mets le curseur au début de ta fonction et tu appuies sur F5 : la ligne doit être surlignée en rouge.

Quand tu lance l'éxécution, tu click sur ton bouton, et le code arrive à l'endroit du point d'arrêt... Tu peux alors avancer étape par étape dans ton code en appuyant sur F7, et tu peux vérifier la valeur de tes variables en mettant le curseur dessus....

Et la prochaine fois, écris dans le forum au lieu de mettre une source : tu peux faire un copier/coller du code...

Keep Cool & Be Wild
DivaDz