ben justement j'ai fais la déclaration en statique et mes deux variables sont déclarées et je leurs ai attribué des valeurs quelques lignes en dessus
Version imprimable
Et pourquoi tu n'utilise pas le std::vector, qui permet, lui, de créer des tableaux dynamique (sans connaitre le nombre d'occurrence)
Ben .... t'es sur maître henderson ? :oops:
Juste une supposition: on pourrait imaginer utiliser un dérivé de TButton, pour lequel on spécifie dès la création les "coordonnées" qu'il aura dans la grille en 2D.
.h
.cppCode:
1
2
3
4
5
6
7
8
9
10
11 class TMButton: public TButton { typedef TButton inherited; private: // public: __fastcall virtual TMButton(Classes::TComponent* AOwner, int aX, int aY); int b_aX; int b_aY; };
Ensuite, à la création de chaque bouton, perso je stockerais dans une TList, afin de parcourir la TList et de comparer les valeurs de 'b_aX ' et 'b_aY' de chaque items en comparaison a la colonne/ligne de la grille 2D.Code:
1
2
3
4
5
6
7 __fastcall TMButton::TMButton(Classes::TComponent* AOwner, int aX, int aY) : TButton(Owner) { b_aX = aX; b_aY = aY; } //---------------------------------------------------------------------------
On peut sinon parcourir a l'aide d'une boucle tous les objets de la form, du style:
et accéder aux propriétés de ces boutons, etc ...Code:
1
2
3
4
5
6 for (int i = 0; i < TheForm->ControlCount ; i ++ ) { if (TheForm->Controls[i]->ClassNameIs("TMButton")) { //etc,etc
@+
;)
Salut !
Connues donc au sens de constantes !
Ou bienCode:
1
2
3 const int nbreCasesLargeur = 10; const int nbreCasesHauteur = 10;
A ce moment là seulement, BCB accèptera de construire ton tableau.Code:
1
2
3 #define nbreCasesLargeur 10 #define nbreCasesHauteur 10
Sinon avec une matrice :
Code:
1
2 TButton ***tabButton;
Dans ce cas, ne pas oublier de gérer la destruction des tableaux !Code:
1
2
3
4
5
6
7
8
9
10
11
12 tabButton = new TButton**[10]; for(int y = 0; y < 10; y++) { tabButton[y] = new TButton*[10]; for(int x = 0; x < 10; x++) { tabButton[y][x] = new TButton(this); tabButton[y][x]->Parent = this; //... } }
Sinon, on peut faire une liste de TList... avec un TComponent pour gérer l'ensemble (pour en gérer au moins la construction et la destruction).
(On a du faire le tour des possibilités...)
A plus !
mais quel merdier le c++ avec tous ces pointeurs , c est tout de meme plus facile en php de creer dynamiquement des "composants indéxés"
sinon poursuivez cette discussion si elle n est pas close , c est un sujet interessant , je suis de loin
bonne journée
Bonjour,
@cedni: je n'ai pas réagi hier en lisant ceci, mais maintenant que j'y pense ... tu parles de php, et comme je suis en train de "blaireauter" sur un problème de php je me disais que - peut être - si tu as qq instants, tu pourrais jeter un oeil sur mon problème ... :mrgreen:
Merci. ;)
j ai lancé une idée sur ton topic
ok merci (dsl pour ma réponse un peu lente)
j'ai essayé mais est-il possible de déclarer une constante en fonction d'une variable
par exemple:
merci.Code:
1
2
3
4
5
6
7
8
9
10 // déclaration des variables int nbreCasesLargeur = 10; int nbreCasesHauteur = 10; // déclaration des constantes const int constCasesLargeur = nbreCasesLargeur; const int constCasesHauteur = nbreCasesHauteur; // création d'un tableau 2dimensions pour stocker les boutons TButton *tabButton[constCasesLargeur][constCasesHauteur];
rebonsoir à tous
j'ai un problème dans ma fonction qui crée les boutons et j'arrive pas à trouver où elle est...
est ce que quelqu'un est plus fort que moi à cache cache??
un indice cela me génère une violation d'accèsCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 // création d'un tableau 2dimensions pour stocker les boutons TButton *tabButton[12][12]; // création dynamique des boutons for (int i = 1; i <= nbreCasesHauteur; i++) { for (int j = 1; j <= nbreCasesLargeur; j++) { // création du bouton TButton *bu_button; // la fenêtre est propriétaire du nouveau bouton // i = la lettre pour la ligne // j = le chiffre pour la colonne tabButton[i][j] = new TButton(this); // et c'est dans Form1 qu'il doit s'afficher tabButton[i][j]->Parent = Form1; // ensuite on définit les autres propriétés tabButton[i][j]->Visible = false; lettre = (i + 64); tabButton[i][j]->Name = "bu_" + AnsiString(lettre) + AnsiString(j); tabButton[i][j]->Width = buWidth; tabButton[i][j]->Height = buHeight; tabButton[i][j]->Left = x; tabButton[i][j]->Top = y; tabButton[i][j]->OnClick = Form1->bu_buttonClick; tabButton[i][j]->Caption = ""; tabButton[i][j]->Visible = true; x += buWidth + 8; } y += buHeight + 8; x = 8; }
bonne chance... lol...
pour la partie de cache cache c'est bon j'ai pu trouver l'erreur en tanonant un peu
Salut !
Code:
1
2
3
4
5 for (int i = 1; i <= nbreCasesHauteur; i++) { for (int j = 1; j <= nbreCasesLargeur; j++) {
Code:
1
2
3
4
5 for (int i = 0; i < 12; i++) { for (int j = 0; j < 12; j++) {
A plus !
l index 0 , le premier , etait ce celà ?
ben explique concretement , c est tjrs interessant de resoudre un probleme
ok je veux bien vous montrer le code
le .cpp
et le .hCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 // création dynamique des boutons for (int i = 1; i <= nbreCasesHauteur; i++) { for (int j = 1; j <= nbreCasesLargeur; j++) { // création du bouton TButton *bu_button; // la fenêtre est propriétaire du nouveau bouton // i = la lettre pour la ligne // j = le chiffre pour la colonne tabButton[i][j] = new TButton(this); // et c'est dans Form1 qu'il doit s'afficher tabButton[i][j]->Parent = Form1; // ensuite on définit les autres propriétés tabButton[i][j]->Visible = false; lettre = (i + 64); tabButton[i][j]->Name = "bu_" + AnsiString(lettre) + AnsiString(j); tabButton[i][j]->Width = buWidth; tabButton[i][j]->Height = buHeight; tabButton[i][j]->Left = x; tabButton[i][j]->Top = y; tabButton[i][j]->OnClick = Form1->bu_buttonClick; tabButton[i][j]->Caption = ""; tabButton[i][j]->Visible = true; x += buWidth + 8; } y += buHeight + 8; x = 8; }
Code:
1
2
3
4 public: // création d'un tableau 2dimensions pour stocker les boutons TButton *tabButton[12][12];
j'ai changé d'endroit la déclaration de mon tableau...
et ça marche
tu déclare en avance : TButton *tabButton[12][12];
mais si durant ton application tu dois augmenter le nombre de bouton.
exemple :
1°) l'utilisateur introduit le nombre de bouton qu'il veut voir afficher.
chez toi [12] [12], jusqu'ici tout va bien.
2°) durant l'exécution du programme il veut AJOUTER des boutons !!
comment faire ? la déclaration a déjà été faite ! il fraudait utilise une liste chainé ! une liste de pointeur d'objet !
il y possibilité de le faire via la méthode VECTOR, mais jamais utilisé.
je vais poste la question avec un exemple
Comment créer un pointeur d'objet ou une liste chainée d'objet !
qu'on peut augmenter et diminuer ( push/pop ).
le but de mon projet est d'afficher dynamiquement des images venant
d'un disque distant.
je ne connais pas le nombre d'images en avance mais le réel problème est que les images peuvent augmenter pendant l'exécution du programme.
Je voudrais éviter que mon programme reffasse toute la boucle
juste pour afficher 1 images qui vient d'être détecté.
la classe Edit
CodeCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 class Cases : public TEdit { private: public: Cases(TForm*o):TEdit(o) { this->Parent = o; this->Top = 120; this->Left = 20; this->Width = 100; this->Height = 30; } __fastcall Cases(); DYNAMIC void __fastcall Click(); };
comment remédier a ce problème !.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 // on introduit le nombre de Edit que l'on veut dans la variable "valeur" // mais comme le tableau d'objet est déclaré à 50, donc on est limité void __fastcall TForm1::Button1Click(TObject *Sender) { int valeur = 50; Cases *tab[valeur]; for(int j=0; j<valeur; j++) { tab[j]= new Cases(Form1); tab[j]->Top = ( 105 + (tab[j]->Height * j) ); tab[j]->Text = " BOUTON N° "; tab[j]->Text = tab[j]->Text + j; } }
Merci
franchement aucune idée
dans mon application 144 est le nombre max de boutons que je peux créer (un cadrillage de 12 * 12 boutons)
donc je ne me suis jamais posé la question
mais bonne chance
Salut !
Par exemple avec un TList pour assurer la gestion dynamique.
Le fait d'avoir une liste d'objets en 1D n'est pas un problème.
Il faut juste connaître le nombre de colonnes (nombre d'objets) pour une ligne.
Si N est le nième objet de la liste et NbCol le nombre de colonnes par ligne :
col = N % NbCol
lig = N / NbCol
De la même manière :
N = (lig * NbCol) + col
Si on veut encore plus de souplesse, dans ce cas on peut faire une liste de listes.
Cela permet d'ajouter et de supprimer des lignes (ainsi que des colonnes mais d'une manière différente).
Il vaut mieux envisager de développer cette dernière solution à l'aide d'un objet pour superviser l'ensemble, en dérivant de TComponent par exemple.
Il y a d'autres solutions... dont je laisse le soin à d'autre de parler !
A plus !