Numéro d'un composant dans une boucle

Résolu
cs_ridertart Messages postés 8 Date d'inscription lundi 11 décembre 2006 Statut Membre Dernière intervention 19 décembre 2006 - 18 déc. 2006 à 17:41
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 19 déc. 2006 à 09:31
Bonjour,
J'ai une petite question en delphi, je suppose que ce doit pas être très compliqué mais je ne sais pas comment faire et ca pourrait réduire la taille de mon programme !
Voila par exemple dans un boucle,
Je dois faire


        StringGrid2.Cells[a,0] := ...


        StringGrid3.Cells[a,0] := ...


        StringGrid4.Cells[a,0] := ...


        StringGrid5.Cells[a,0] := ...


        StringGrid6.Cells[a,0] := ...

Et je cherche le moyen de nommé les composant dans la boucle par exemple
    For i:=2 to 6 do

    begin

        StringGrid[i].Cells[a,0] := ...
    end;

Or je sais que le [i] n'est pas bon (StringGrid[i].Cells[a,0] := ...)

Quelqu'un peut il m'aider ?

Merci d'avance.

3 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
18 déc. 2006 à 18:22
Bonsoir,

Une solution serait d'utiliser FindComponent pour lister tes StringGrid :

For i:=0 to Form1.ComponentCount-1 do
begin
  if (Form1.Components[i] is TStringGrid) then
  begin
    TStringGrid(Form1.Components[i]).Cells[a,0] := ...
  end ;
end;

Cordialement.

<hr />"L'imbécile prétentieux est celui qui se croit plus intelligent que ceux qui sont aussi bêtes que lui"/STRONG>
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
18 déc. 2006 à 18:25
Tu peux également utiliser le FindComponent :

For i:=2 to 6 do
begin

  TStringGrid(FindComponent('StringGrid'+IntToStr(i))).Cells[a,0] := ...
end;

Cordialement.

<hr />"L'imbécile prétentieux est celui qui se croit plus intelligent que ceux qui sont aussi bêtes que lui"/STRONG>
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
19 déc. 2006 à 09:31
salut,

si tu dois faire des acces frequent, une autre solution plus efficace qu'une recherche serrait d'avoir un tableau de TStringGrid.

genre

MesStringGrid : array[0..6] of TStringGrid;

et soit tu les crée dynamiquement (fait des recherch sur la création de composant dynamique),
soit tu init le tableau dans le form create (le plus simple pour toi je supose).

MesStringGrid[0] := StringGrid0;
MesStringGrid[1] := StringGrid1;
...

ensuite, c'est un tableau normal:

for i:=low(MesStringGrid ) to high(MesStringGrid ) do begin
  MesStringGrid[i].Xxx
end;

en esperant t'avoir aider,

Loda

PS: au cas ou cela ne serrait pas clair pour toi, tu n'as pas besoin de detruire le tableau dans le form destroy.
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
3
Rejoignez-nous