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 ?
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
.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 const int nbreCasesLargeur = 10; const int nbreCasesHauteur = 10;
A ce moment là seulement, BCB accèptera de construire ton tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #define nbreCasesLargeur 10 #define nbreCasesHauteur 10
Sinon avec une matrice :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TButton ***tabButton;Dans ce cas, ne pas oublier de gérer la destruction des tableaux !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ...
Merci.![]()
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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ès
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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (int i = 1; i <= nbreCasesHauteur; i++) { for (int j = 1; j <= nbreCasesLargeur; j++) {
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (int i = 0; i < 12; i++) { for (int j = 0; j < 12; j++) {
A plus !
ben explique concretement , c est tjrs interessant de resoudre un probleme
ok je veux bien vous montrer le code
le .cpp
et le .h
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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code
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
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 : 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
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 !
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