IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Parcourir un ensemble de composant [Débutant(e)]


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut Parcourir un ensemble de composant
    bonjour, je cherche une solution pour incrémenter un nom,
    style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i=0,i++,i<25)
       if (tableau[i][3] ==1)
         {radiobutton[i]->checked=true;...
          }
    est ce possible avec la version 3 de Borland C++builder
    et comment
    merci
    Edrc30

    Balises [Code] rajoutées par henderson

  2. #2
    Membre chevronné Avatar de BigBenQ
    Inscrit en
    Juillet 2005
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 363
    Par défaut
    Si je ne m'abuse, ca s'écrit plutot


  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Qu'appelles-tu incrémenter un nom ?
    Passer de "Toto1" à "Toto2" ?
    Si oui, c'est faisable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString nom = "Toto"+AnsiString(nb);
    si je ne m'abuse, je n'ai pas C Builder à portée.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    C'est assez difficile de répondre. Tout dépend comment tu a agencé tes radiobuttons
    dont le fonctonnement est mutuellement exclusif dès lors qu'il sont détenus par un même
    propriétaire.

    Un exemple qui ne répond probablement pas à ton cas :

    Ici on suppose que chaque radiobutton est associé à un panel dont BevelOuter et BevelInner
    sont bvNone (plat et de même couleur que la form ce qui donne l'illusion d'être invisible).
    Chaque panel est donc détenteur d'un seul objet : un radiobutton.

    Voici le code que je simplifie ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    int Tableau[4] = {0,0,1,1}; //pour le test
     
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    AnsiString name;
    for(int i = 0; i < 4; i++)
        {
        //je recherche un panel et non pas le radiobutton que détient le panel
        name = "Panel" + IntToStr(i + 1); 
        for(int j = 0; j < ControlCount; j++)
            {
            //Je cherche un objet déténu par la form qui a pour nom name
            if(Controls[j]->Name == name)
                {
                //TPanel hérite de TWinControl...
                TWinControl *W = (TWinControl*)Controls[j];
                //Le radiobutton est ici.
                //Est-ce que le "if" est nécéssaire chez toi ? Si non on peut faire simple
                ((TRadioButton*)W->Controls[0])->Checked = (Tableau[i] == 1);
                }
            }
        }
    }
    Sinon, il y a la possibilité d'utiliser une TList qu'il faut initialiser dans le
    constructeur de la form. Mais un tableau de pointeurs peut également faire l'affaire !
    Dans ce cas, on accède à l'objet directement par un index !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TList *Liste;
    ...
    ((TRadioButton*)Liste->Items[i])->Checked = (Tableau[i] == 1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TRadioButton* Tableau[i];
    ...
    Tableau[i]->Checked = (Tableau[i] == 1);
    Si les radiobuttons peuvent être regroupés (TRadioGroup), dans ce cas il faut raissonner
    dans ce sens et modifier la structuration des données.

    Ou bien utiliser des TCheckBox dont le fonctionnement est indépendant... et la, on a le choix
    quant à la méthode à employer !

    A plus !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut
    en fait, j'ai un tableau comme dans mon exemple, avec une adresse, si cette adresse (de 0 a 80) est différente de 00, je voudrais cocher une TCheckBox, cela pour voir les adresses encore disponibles.

    donc mon probleme est : au lancement, je parcours le tableau, mais pour incrémenter le nom de la TCheckBox, le compilateur me renvoi une erreur qui est en gros "Nom TCheckBox[i] inconnu"
    ou "devant -> un truc est attendu" mais pas ...
    je ne l'ai pas sous les yeux, je regarderai ce soir l'intitulé exact

    cela pour le programme de gestion visible sur http://al1marklin.free.fr , onglet "programme" dans la configuration

    c'est un programme sans prétention, d'autodidacte, qui essaie de faire au mieux pour comprendre ce qu'il fait, et ne pas recopier betement des lignes de code

    merci de votre aide

  6. #6
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par al1rc30
    mais pour incrémenter le nom de la TCheckBox
    En principe, on n'incrémente pas un nom, ça n'a pas beaucoup de sens, on crée un tableau de pointeurs et on parcourt le tableau. Si vous avez beaucoup de composants, il n'est pas pensable de les créer à la main à la conception, donc vous les créez par programme. À cette occasion, il est facile d'avoir un tableau de pointeurs dont le nombre est donné par une constante (pour éviter d'avoir un nombre "en dur" dans le programme) et de le parcourir logiciellement.

    À bientôt
    Gilles

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Il te faut construire le tableau des TCheckBox comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int count=10;  // p.ex. ici pour 10 checkboxes
    TList* boxes=new TList();  // Le tableau des cases à cocher
    for (int i=0;i<count;++i) {
      // Crée la checkbox
      TCheckBox* box=new TCheckBox(this);
      box->Parent=this;   // Pour l'afficher dans le form... Tu peux mettre un panel ou qqch d'autre à la place de "this"
      // Positionner la checkbox dans ton contenant et lui donner les caractéristiques que tu veux
      box->Top=...
      box->Left=...
      ...
      // Sauver la checkbox dans le tableau
      boxes->Add(box);
    }
    Ensuite, tu peux retrouver une checkbox par sa position dans ton tableau (propriété Items) ou, à l'inverse, sa position par le pointeur (méthode IndexOf):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (i=0;i<boxes->Count;++i) {
      if (tableau[i][3] ==1) {
        // Récupérer le pointeur
        TCheckBox* box=static_cast<TCheckBox*>(boxes->Items[i]);
        // Changer l'état de ta checkbox
        box->Checked=true;
        // Continuer avec ton cas particulier
        ...
      }
    }
    Finalement, n'oublie pas de détruire le tableau de pointeurs (delete boxes) en quittant ton programme. Les pointeurs eux-même seront automatiquement détruit par le formulaire lorsqu'il se fermera (TCheckBox est un TComponent et le propriétaire de l'objet déterminé lors de la création, le "this" dans new TCheckBox(this) détruit automatiquement ses propres objets).

    J'ai écrit tout ça sans le tester... Il y a certainement des petites erreurs, désolé par avance.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut
    j'ai deux problemes en fait,
    le premier est avec des radiobuttons a incrémenter
    ou je teste dans mon tableau si une image est associée, et si oui, je rends valide (dégrise) le radiobutton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (i=0,i<81,i++)
    {
    if (tableau[i][image] =! 0)
       radiobutton[i]->enabled=true;
    }
    et c'est la qu'il me repond qu'il ne connait pas "radiobutton[i]"
    donc pour me dépanné, j'ai copier/coller le test 80 fois en mettant les vrais chiffres mais pour faire propre j'aimerai savoir comment faire

    et mon deuxieme probleme,
    dans ce meme tableau, je fixe une adresse de 1 à 80
    et j'ai affiché un panel avec 80 TCheckBox
    dont les noms sont : adresse01 à adresse80
    je lit le tableau et cherche a cocher l'adresse (digadd) renseignée correspondante

    je me suis battu avec des itoa, swprintf,...
    mais je n'y arrive pas
    voila ce que je cherche a faire sachant que le "digadd"
    recherché en question est un entier et que je voudrais le
    mettre au bout de "adresse" pour faire le nom de ma
    TCheckBox à cocher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (i=0,i<81,i++)
    {
    if (tableau[i][digadd] =! 0)
       adresse[tableau[i][digadd]]->checked=true;
    }
    cordialement

  9. #9
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Dites-nous déjà comment sont créés vos 80 radiobouttons. Les avez-vous créés à la conception (j'ose espérer que non) ou par programme?

    Il ne faut pas écrire de nombre "en dur" dans le programme, il faut créer une constante

    et utiliser cette constance dans le programme, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0;i<NbRadioB;i++)
       {
       // contenu de la boucle
       }
    Ensuite il faut soit créer un tableau de pointeurs soit passer par un TList comme dans l'exemple qui vous a été proposé.

    À bientôt
    Gilles

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut
    tout a été créé à la conception, tant les Radiobuttons que les Checkbox,
    le nombre de 80 adresses est figée chez Märklin par le boitier de controle
    et j'essaye au maximun de mettre constantes et variables mais il y en a qui m'échappent de temps a autre.

  11. #11
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Dans ce cas, il faut déclarer dans la classe principale un tableau de pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TRadioButton* TabRB[NbRadioB];
    où NbRadioB est votre constante.

    Dans le constructeur de votre classe principale (je suppose que les RadioButtons sont connus à ce stade, sinon trouvez un endroit où procéder à cette initialisation), vous initialisez votre tableau avec les noms des RadioBouttons car ces noms sont des pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i=0;
    TabRB[i++]=RadioButton1;
    TabRB[i++]=RadioButton2;
    TabRB[i++]=RadioButton3;
    TabRB[i++]=RadioButton4;
    TabRB[i++]=RadioButton5;
    ...
    ... // toute la suite
    Dans ces conditions, vous avez accès dans une boucle à vos RadioBoutons, par exemple pour initialiser leur Tag, on pourra écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i;
    for(i=0;i<NbRadioB;i++)
       {
       TabRB[i]->Tag=i;
       }
    Faites pareil avec les autres composants, créez des tableaux de pointeurs et ça marchera.

    À bientôt
    Gilles

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut
    merci, c'est exactement ce que je cherchais
    mes problèmes sont résolus,
    merci encore à tout ceux qui m'ont répondu
    cordialement
    Al1rc30

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle pour parcourir un ensemble de valeur
    Par lisa.a dans le forum Langage
    Réponses: 3
    Dernier message: 21/02/2010, 12h51
  2. parcourir l'ensemble d'E-mails
    Par GENI36 dans le forum VBA Outlook
    Réponses: 6
    Dernier message: 14/10/2008, 16h57
  3. Parcourir l'ensemble de control
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/01/2008, 10h43
  4. [TImage] Parcourir un ensemble de composants
    Par SaianSupa dans le forum C++Builder
    Réponses: 1
    Dernier message: 16/04/2006, 10h26
  5. Parcourir l'ensemble des enregistrements d'une table
    Par Aurèl90 dans le forum Access
    Réponses: 17
    Dernier message: 22/09/2005, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo