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 :

[BCB 5] Trouver les composants contenus dans un panel


Sujet :

C++Builder

  1. #1
    Yoh
    Yoh est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 46
    Points
    46
    Par défaut [BCB 5] Trouver les composants contenus dans un panel
    Bonjour,

    Il y a fort longtemps que je n'ai plus pratiqué du BCB, je m'y remet pour un projet et je me rend compte que j'ai perdu beaucoup d'acquis.

    Sur ma Form, j'ai un panel contenant 64 TImage tous nommés Image1..Image64.
    Pour assigner des images à ces TImage, je ne veux pas écrire 64 fois Image->Picture->LoadFromFile(...), mais plutot retrouver de manière dynamique ces 64 composants et les remplir via une boucle for.

    J'ai creusé du côté de TComponent->FindComponent(), mais ce n'est pas concluant, je sais de mémoire que c'est possible, alors si quelqu'un pouvait m'éclairer...

    Merci pour vos réponses.

  2. #2
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Il s'agit de Controls[] et ControlCount pour gérer les objets enfants (en relation à Parent) donc qu'il affiche.

    Components[] et ComponentCount permettent quant à eux, de gèrer les composants (en relation à Owner) donc qu'il détruit.

    A plus !

  3. #3
    Yoh
    Yoh est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par henderson Voir le message
    Salut !

    Il s'agit de Controls[] et ControlCount pour gérer les objets enfants (en relation à Parent) donc qu'il affiche.

    Components[] et ComponentCount permettent quant à eux, de gèrer les composants (en relation à Owner) donc qu'il détruit.

    A plus !
    Merci pour le conseil Henderson.
    Je vais tester ça.

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Bonjour, je déterre ce vieux sujet car j'ai un problème du même ordre.
    J'ai déjà utilisé Controls[] et ControlCount pour un TForm, dans ce cas tout marche bien, mais cela ne marche pas avec un TPanel.

    Voici un exemple simple de ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::Panel1Click(TObject *Sender)
    {
    TPanel *PrentPanel=(TPanel*)Sender;
    Edit1->Text=PrentPanel->ComponentCount;
    }
    J'ai placé des checkbox et groupbox sur mon panel, mais lorsque j'exécute ce code, il m'affiche 0 dans Edit1, il ne m'indique pas le nombre de composant présent sur le Panel. Comment fair pour compter et référencer les composants sur mon panel?

    A terme je souhaite l'utiliser pour pouvoir cocher ou décocher des checkbox sur le panel avec une checkbox elle aussi sur ce panel.

    Merci.

    PS: je suis sous BCB 6

  5. #5
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Peut-être que dans ton cas il faut décompter en profondeur (de façon récursive) :

    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
     
    int Decompte(TWinControl *WinControl)
    {
    TControl *Control;
    int n = WinControl->ControlCount;
    int count = n;
    for(int j = 0; j < count; j++)
        {
        Control = WinControl->Controls[j];
        if(Control->InheritsFrom(__classid(TWinControl)))
            {
            n = n + Decompte( (TWinControl*)Control );
            }
        }
    return n;
    }
    J'ai utilisé commme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm1::Panel1Click(TObject *Sender)
    {
    Label1->Caption = Decompte(Panel1);
    }
    Pour la deuxième partie du message ... on va y réfléchir ... !

    A plus !

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    Merci, j'ai réussit à modifier ton code pour faire ce que je veux, et ça marche super bien!

    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
    void __fastcall SelectAll(TObject *Sender,TWinControl *WinControl)
    {
    TControl *Control;
    int count = WinControl->ControlCount;
     
    for(int j = 0; j < count; j++)
        {
        Control = WinControl->Controls[j];
        // Je vérifie si l'objet est une CheckBox et si son Tag est supérieur à 0.
        if(Control->ClassNameIs("TCheckBox")&&Control->Tag>0)
            {
            ((TCheckBox*)Control)->Checked= ((TCheckBox*)Sender)->Checked;
            }
        else if(Control->InheritsFrom(__classid(TWinControl)))
            {
            SelectAll( Sender, (TWinControl*)Control );
            }
        }
    }
    Utilisation:
    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
    TCheckBox *MSender;
    TWinControl *WinControl;

    MSender=((TCheckBox*)Sender);
    WinControl=MSender->Parent;

    SelectAll(MSender,WinControl);

    }
    Une fois de plus, merci beaucoup henderson!

Discussions similaires

  1. Ou trouver les composants Ado dans delphi Xe2 starter
    Par mario9 dans le forum Bases de données
    Réponses: 11
    Dernier message: 08/02/2012, 02h50
  2. Afficher les noms contenus dans la ldap
    Par NicoO_O dans le forum Langage
    Réponses: 2
    Dernier message: 23/04/2007, 14h59
  3. [VBA] lister les fichiers contenus dans un .ZIP
    Par DJBORIE dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/04/2007, 17h49
  4. Ou trouver les composants de data base ( DBGO )
    Par Nadirov dans le forum Delphi
    Réponses: 2
    Dernier message: 14/08/2006, 14h15
  5. Récupérer les informations contenus dans un mail
    Par acado dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 17
    Dernier message: 10/04/2006, 14h48

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