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

cs_ridertart 9 Messages postés lundi 11 décembre 2006Date d'inscription 19 décembre 2006 Dernière intervention - 18 déc. 2006 à 17:41 - Dernière réponse : cs_ridertart 9 Messages postés lundi 11 décembre 2006Date d'inscription 19 décembre 2006 Dernière intervention
- 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
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 18 déc. 2006 à 18:22
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de WhiteHippo
Meilleure réponse
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 18 déc. 2006 à 18:25
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de WhiteHippo
Meilleure réponse
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 19 déc. 2006 à 09:31
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 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.