Bonjour
je souhaite changer la propriété des composants TShape de la fenetre grace a une boucle est ce possible ?
exemple:
ShapeBP1
ShapeBP2
seul le dernier chiffre change j'ai 21 composants à changer de couleur.
Merci
Bonjour
je souhaite changer la propriété des composants TShape de la fenetre grace a une boucle est ce possible ?
exemple:
ShapeBP1
ShapeBP2
seul le dernier chiffre change j'ai 21 composants à changer de couleur.
Merci
Salut,
Voici un lien qui décrit comment changer plusieur composant dans une boucle :http://chgi.developpez.com/tips1/#tips15
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
j'ai un problème car il ne rentre jamais dans la boucle if pourtant il y a des composant de type TShape dans la fiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void __fastcall TForm1::Button1Click(TObject *Sender) { for ( int x=0 ; x<ControlCount ; x++) if ((AnsiString)Controls[x]->ClassName() == "TShape" ) ((TShape*)Controls[x])->Brush->Color = clRed; }
Salut, est-ce que les TShape sont directement sur ta Form ou il sont dans un TPanel ou autre container?
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
Oui effectivement les TShape se trouve dans un TGroupBox
As tu une solution au problème ?
Merci
Si tes TShape sont toujours dans un TPanel tu peux utiliser ce code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 for ( int n=0 ; n<ControlCount ; n++) { if (Controls[n]->ClassName() == "TPanel" ) { for ( int x=0 ; x<dynamic_cast<TPanel *>(Controls[n])->ControlCount ; x++) { if ((AnsiString)Controls[x]->ClassName() == "TShape" ) ((TShape*)Controls[x])->Brush->Color = clRed; } } }
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
Oups je voulais mettre un TGroupBox:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 for ( int n=0 ; n<ControlCount ; n++) { if (Controls[n]->ClassName() == "TGroupBox" ) { for ( int x=0 ; x<dynamic_cast<TGroupBox *>(Controls[n])->ControlCount ; x++) { if ((AnsiString)Controls[x]->ClassName() == "TShape" ) ((TShape*)Controls[x])->Brush->Color = clRed; } } }
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
merci pour ton aide
j'ai l'erreur suivante :
operator == 'non implémenté dans le type 'ShortString' pour les arguments de type 'char *'
a la ligne suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ((Controls[n]->ClassName()) == "TGroupBox" )
Essais ceci, j'ai ajouter un casting en AnsiString:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 for ( int n=0 ; n<ControlCount ; n++) { if ((AnsiString)Controls[n]->ClassName() == "TGroupBox" ) { for ( int x=0 ; x<dynamic_cast<TGroupBox *>(Controls[n])->ControlCount ; x++) { if ((AnsiString)Controls[x]->ClassName() == "TShape" ) ((TShape*)Controls[x])->Brush->Color = clRed; } } }
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
je n'ai aucune erreur de compilation mais lorsque je clique sur le bouton le programme plante et j'ai le message suivant:
une classe d'exception EListError avec le message 'Indice de liste hors limites (5)' Processus stoppé
Est-ce que tu as essayer de mettre un Point d'arrêt (Break point) au début du code pour voir ou le problème survient?
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
J'ai trouvé le problème:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 for ( int n=0 ; n<ControlCount ; n++) { if ((AnsiString)Controls[n]->ClassName() == "TGroupBox" ) { TGroupBox *GroupBox = dynamic_cast<TGroupBox *>(Controls[n]); for ( int x=0 ; x<GroupBox->ControlCount ; x++) { if ((AnsiString)GroupBox->Controls[x]->ClassName() == "TShape" ) ((TShape*)GroupBox->Controls[x])->Brush->Color = clRed; } } }
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
Merci pour ton aide cela fonctionne très bien
Pour les exceptions on peut utiliser la propriété Name ou Tag, voici un exemple:
Tag peut permettre de faire des groupes ce qui peut être utile.
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 for ( int n=0 ; n<ControlCount ; n++) { if ((AnsiString)Controls[n]->ClassName() == "TGroupBox" ) { TGroupBox *GroupBox = dynamic_cast<TGroupBox *>(Controls[n]); for ( int x=0 ; x<GroupBox->ControlCount ; x++) { if ((AnsiString)GroupBox->Controls[x]->ClassName() == "TShape" ) { // On peut utiliser la propriété Name ou Tag pour les exceptions if((AnsiString)GroupBox->Controls[x]->Name == "Shape1") ((TShape*)GroupBox->Controls[x])->Brush->Color = clBlue; else ((TShape*)GroupBox->Controls[x])->Brush->Color = clRed; } } } }
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
À la place d'utiliser Controls tu peux utiliser Components, il ne tiens pas compte des parents (container), il regarde tous les composants d'un TForm. Je met le code au cas ou tu aimerais mieux cette façon:
Voici une petite description tiré de l'aide:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for ( int x=0 ; x<ComponentCount ; x++) { if ((AnsiString)Components[x]->ClassName() == "TShape" ) { // On peut utiliser la propriété Name ou Tag pour les exceptions if((AnsiString)Components[x]->Name == "Shape1") ((TShape*)Components[x])->Brush->Color = clBlue; else ((TShape*)Components[x])->Brush->Color = clRed; } }
Use Components to access any of the components owned by this component, such as the components owned by a form. The Components property is most useful when referring to owned components by number rather than name. It is also used internally for iterative processing of all owned components.
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
J'ai encore une petite amélioration à apporter à mon dernier message. À la place d'utiliser
On peut tout simplement utilsier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part ClassName() == "TShape"
Voici ce que sa donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part ClassNameIs("TShape")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for ( int x=0 ; x<ComponentCount ; x++) { if (Components[x]->ClassNameIs("TShape")) { // On peut utiliser la propriété Name ou Tag pour les exceptions if((AnsiString)Components[x]->Name == "Shape1") ((TShape*)Components[x])->Brush->Color = clBlue; else ((TShape*)Components[x])->Brush->Color = clRed; } }
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager