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
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
Bonjour,
Commence par voir ceci
Bonne lecture. :])
salut,
tu as par quoi commencer ici![]()
salutEnvoyé par kmaniche
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
Tu peux lister tous les composants d'une TForm en utilisant Components[i] avec i qui varie de 0 à ComponentCount.
exemple:
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]
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..... }
Franck
Envoyé par franckcl
salut
c'est à cette ligne de mon code que j'ai l'erreur:
this->Components[j])->Glyph->LoadFromFile(Valeur);
merci
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"); }
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)
franck
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); }
salut et merci ,Envoyé par kmaniche
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
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).
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" ; }
salut c mon code,mais je vois pas de balises,Envoyé par kmaniche
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![]()
![]()
![]()
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,Envoyé par kmaniche
mais comment pourrai-je accéder aux controle qui sont dans un panel.
et merci encore
Je pense que si tu remplaces
Form1 -> Components[i]
par
Form1 -> Panel1 -> Components[i]
ça devrait marcher
salutEnvoyé par franckcl
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.
merci pour ton aide
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" ; } }
Il y a peut-être un problème de mise à jour, essaye ceci:
((TSpeedButton*)Form1 ->Panel2 -> Components[j]) -> Update();
ou alors
Form1 ->Panel2->Update();
moi je vote pour :
Si c'est un panel...alors je relances ma fonction sur le panel à la place de la form
salut les amisEnvoyé par say
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:
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?
Partager