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 les forms et les objets d'une applications


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut parcourir les forms et les objets d'une applications
    salut les amis
    comment parcourir toutes les forms et tous les objets et tester si un objet est un label ou speedbutton,car je veux appliquer la propriété Glyph aux sppedbuttons et la propriété caption aux labels.
    et merci encore

  2. #2
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjour,

    Commence par voir ceci


    Bonne lecture. :])

  3. #3
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    salut,

    tu as par quoi commencer ici

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut
    Citation Envoyé par kmaniche
    salut,

    tu as par quoi commencer ici
    salut
    j'ai fait ça:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (Controls[j]->Name == section)//je vérifie si le controle trouvé est celui que je désire
        {
              if(this->Components[j]->ClassNameIs("TSpeedButton"))
                    {
                   (this->Components[j])->Glyph->LoadFromFile(Valeur);
                    }
              else
                    {
                    (this->Components[j])->Caption=Valeur;
                    }
        }

    mais j'ai cette erreur:
    'Glyph' is not a member of 'Tcomponent'
    merci pour votre aide

  5. #5
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut
    Tu peux lister tous les composants d'une TForm en utilisant Components[i] avec i qui varie de 0 à ComponentCount.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (i=0;i<MyForm->ComponentCount;i++) 
    {
     
    	if ( ((String)MyForm->Components[i]->ClassName())=="TLabel")  alors faire.....	
     
    }
    Attention, si tu as des composants dans un TPanel, il faudra faire la même chose dans le TPanel car les composants qui sont à l'interrieur sont aussi listés dans Panel->Components[i]
    Franck

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut
    Citation Envoyé par franckcl
    Tu peux lister tous les composants d'une TForm en utilisant Components[i] avec i qui varie de 0 à ComponentCount.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (i=0;i<MyForm->ComponentCount;i++) 
    {
     
    	if ( ((String)MyForm->Components[i]->ClassName())=="TLabel")  alors faire.....	
     
    }
    Attention, si tu as des composants dans un TPanel, il faudra faire la même chose dans le TPanel car les composants qui sont à l'interrieur sont aussi listés dans Panel->Components[i]
    Franck


    salut
    c'est à cette ligne de mon code que j'ai l'erreur:
    this->Components[j])->Glyph->LoadFromFile(Valeur);
    merci

  7. #7
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Biensûr,

    voici la solution (j'ai pas eu le temps de tester) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int i = 0 ; i < Form1 -> ComponentCount ; i++)
      if(Form1 -> Components[i] -> ClassNameIs("TSpeedButton"))
        {
           ((TSpeedButton*)Form1 -> Components[i] -> Name) -> Glyph->LoadFromFile("chemin");
        }

  8. #8
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut
    Voici un exemple que j'utilise pour un composant ListItems.
    Tu peux remplacer Comp par Components[i] si "i" concerne le composant dont tu veux acceder à la propriété Glyph.
    Nomprop est une chaine de caractère qui contient le nom de composant. (=Champ Name)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     TListItems *TS;
     int i;
     PPropInfo PI;
     
     PI=GetPropInfo((PTypeInfo)Comp->ClassInfo() , Nomprop);
     if (PI!=NULL)
     {
       TS = (TListItems*)(GetOrdProp(Comp, PI));
       // on peut utiliser TS comme un composant normal
       ShowMessage(TS->Name);
     }
    franck

  9. #9
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut
    Citation Envoyé par kmaniche
    Biensûr,

    voici la solution (j'ai pas eu le temps de tester) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int i = 0 ; i < Form1 -> ComponentCount ; i++)
      if(Form1 -> Components[i] -> ClassNameIs("TSpeedButton"))
        {
           ((TSpeedButton*)Form1 -> Components[i] -> Name) -> Glyph->LoadFromFile("chemin");
        }
    salut et merci ,
    j'ai déjà ça qui marche:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    ((TSpeedButton *)Controls[j])->Glyph->LoadFromFile(Valeur);

    mais mon probléme c'est quand ce n'est pas un tspeedbutton:
    car dans ce cas j'aimerai changer la propriété caption du controle

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else
    {
    (this->Components[j])->Caption=Valeur;
    }

    merci d'avance

  10. #10
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjour,

    je suis trés heureux que ça marche, toutefois il faudra penser au balise pour mettre ton code avant de poster.

    Les balises de code sont accessible via l'icone # (dernière à droite).

  11. #11
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    désolé j'ai pas vu la suite du poste.

    pour le problème qui reste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(int i = 0 ; i < Form1 -> ComponentCount ; i++)
      if(Form1 -> Components[i] -> ClassNameIs("TSpeedButton"))
        {
           ((TSpeedButton*)Form1 -> Components[i]) -> Glyph->LoadFromFile("chemin");
        }
       else if(Form1 -> Components[i] -> ClassNameIs("TLabel"))
        {
           ((TLabel*)Form1 -> Components[i]) -> Caption = "coucou" ; 
        }

  12. #12
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut
    Citation Envoyé par kmaniche
    Bonjour,

    je suis trés heureux que ça marche, toutefois il faudra penser au balise pour mettre ton code avant de poster.

    Les balises de code sont accessible via l'icone # (dernière à droite).
    salut c mon code,mais je vois pas de balises,

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (int j = 0;j < ControlCount;j++)//parcours des controles de ta fiche
     {
         if (Controls[j]->Name == section)//je vérifie si le controle trouvé est celui que je désire
         {
             if(this->Components[j]->ClassNameIs("TSpeedButton"))
             {
                    ((TSpeedButton *)Controls[j])->Glyph->LoadFromFile(Valeur);
             }
             else
             {
                   (Controls[j])->Caption=Valeur;
             }
        }
     }

    est c'est au niveau du "else" que j'ai le prob.
    merci

  13. #13
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Oui, il faut ajouter une autre condition aprés le else.

    Supposons que tu as 2 TSpeedButton, 2 TLabel, et 3 TEdit, si tu utilise ton code tu aura une erreur parceque tu n'a pas pris en considération le TEdit car il n'y a pas de Caption pour un TEDIT.

    Alors regarde le code que je tès donné.

  14. #14
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut
    Citation Envoyé par kmaniche
    Oui, il faut ajouter une autre condition aprés le else.

    Supposons que tu as 2 TSpeedButton, 2 TLabel, et 3 TEdit, si tu utilise ton code tu aura une erreur parceque tu n'a pas pris en considération le TEdit car il n'y a pas de Caption pour un TEDIT.

    Alors regarde le code que je tès donné.
    merci kmaniche,ton code marche bien,
    mais comment pourrai-je accéder aux controle qui sont dans un panel.
    et merci encore

  15. #15
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut
    Je pense que si tu remplaces
    Form1 -> Components[i]
    par
    Form1 -> Panel1 -> Components[i]

    ça devrait marcher

  16. #16
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut
    Citation Envoyé par franckcl
    Je pense que si tu remplaces
    Form1 -> Components[i]
    par
    Form1 -> Panel1 -> Components[i]

    ça devrait marcher
    salut
    j'ai essayé ça ,mais il n'y a pas d'erreur mais mes speedbuttons reste intactes,en plus j'ai 3 panels dans ma form.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (Controls[j]->Name == section)//je vérifie si le controle trouvé est celui que je désire
         {
         if(Form1->Panel2 -> Components[j] -> ClassNameIs("TSpeedButton"))
        {
           ((TSpeedButton*)Form1 ->Panel2 -> Components[j]) -> Glyph->LoadFromFile(Valeur);
        }
       else if(Form1 -> Components[j] -> ClassNameIs("TLabel"))
        {
           ((TLabel*)Form1 -> Components[j]) -> Caption = "coucou" ;
        }
        }
    merci pour ton aide

  17. #17
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut
    Il y a peut-être un problème de mise à jour, essaye ceci:

    ((TSpeedButton*)Form1 ->Panel2 -> Components[j]) -> Update();
    ou alors
    Form1 ->Panel2->Update();

  18. #18
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    moi je vote pour :
    Si c'est un panel...alors je relances ma fonction sur le panel à la place de la form

  19. #19
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par défaut parcourir les objets de maform
    Citation Envoyé par say
    moi je vote pour :
    Si c'est un panel...alors je relances ma fonction sur le panel à la place de la form
    salut les amis
    j'ai une form ou ily a 3panels,et dans ces panels j'ai des sppedbutton et des labels.et je veux parcourirs tous les speedbutton et labels .
    c le code que j'ai: il ne donne pas d'erreur mais il n'accéde pas à mes composants.


    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (int j = 0;j < ControlCount;j++)//parcours des controles de ma form
     {
         if (Controls[j]->Name == "Nom speedbutton")//je vérifie si le controle trouvé est celui que je désire
         {
             if(this->Components[j]->ClassNameIs("TSpeedButton"))
             {
                    ((TSpeedButton *)Controls[j])->Glyph->LoadFromFile("chemin");
             }
             else if(this -> Components[j] -> ClassNameIs("TLabel"))
             {
                   ((TLabel *)Controls[j])->Caption="blabla";
             }
        }
     }

    merci pour votre aide:
    arf:

  20. #20
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    alors, première étape..tu t'organises pour trouver la baliser [CODE] parce que c'est chiant à lire là qd même.

    et ton dernier post, il apporte quoi???
    tu veux peut-etre qu'on te donne la solution directe...
    il me semble d'avoir donner une piste..
    C'est quoi le proto de ta fonction?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Afficher les paramètres d'un objet dans une autre web form
    Par faridbelkcm dans le forum ASP.NET
    Réponses: 0
    Dernier message: 18/09/2012, 17h32
  2. Réponses: 1
    Dernier message: 14/08/2009, 08h50
  3. Parcourir les Form pour les fermer
    Par David dans le forum Delphi
    Réponses: 8
    Dernier message: 04/12/2006, 13h29
  4. Changer les droits sur un objet via une requete
    Par gg72160 dans le forum Sécurité
    Réponses: 1
    Dernier message: 10/06/2006, 21h14

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