Numéro d'un composant dans une boucle [Résolu]

Messages postés
9
Date d'inscription
lundi 11 décembre 2006
Dernière intervention
19 décembre 2006
- - Dernière réponse : cs_ridertart
Messages postés
9
Date d'inscription
lundi 11 décembre 2006
Dernière intervention
19 décembre 2006
- 19 déc. 2006 à 10:32
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Dernière intervention
5 avril 2012
3
Merci
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>

Merci WhiteHippo 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de WhiteHippo
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Dernière intervention
5 avril 2012
3
Merci
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>

Merci WhiteHippo 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de WhiteHippo
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
3
Merci
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.

Merci cs_Loda 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_Loda
Messages postés
9
Date d'inscription
lundi 11 décembre 2006
Dernière intervention
19 décembre 2006
3
Merci
Salut 404584 Loda et  =323345 WhiteHippo,
Grâce à vos explications j'ai pu trouver un compromis en alliant vos solutions. Le résultat est donc :

var
MesStringGrid : array[1..26] of TStringGrid;

et dans Form.Create :

    For i:=1 to 26 do
    begin
    MesStringGrid[i] := TStringGrid(FindComponent('StringGrid'+IntToStr(i)));
    end;

Comme celà j'évite beaucoup de ligne !!!

Merci beaucoup ! C'est génial. Merci encore de m'avoir répondu !

A+

PS (Loda) : cela était très clair pour moi. Tu n'as pas besoin de me réexpliquer  

Merci cs_ridertart 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_ridertart

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.