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 :

évènements sur plusieurs boutons crées dynamiquement


Sujet :

C++Builder

  1. #21
    Membre habitué Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Points : 181
    Points
    181
    Par défaut
    Citation Envoyé par henderson Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TButton *tabButton[nbreCasesLargeur][nbreCasesHauteur];
    Ca ne peut s'envisager que comme une déclaration en statique à condition que les deux dimensions soient connues.

    A plus !
    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

  2. #22
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Et pourquoi tu n'utilise pas le std::vector, qui permet, lui, de créer des tableaux dynamique (sans connaitre le nombre d'occurrence)

  3. #23
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Citation Envoyé par henderson Voir le message
    Tu peux nous montrer ça Sunchaser ?
    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
    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;
    };
    .cpp
    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;
    }
    //---------------------------------------------------------------------------
    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.
    On peut sinon parcourir a l'aide d'une boucle tous les objets de la form, du style:
    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
    et accéder aux propriétés de ces boutons, etc ...

    @+

  4. #24
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Connues donc au sens de constantes !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const int nbreCasesLargeur = 10;
    const int nbreCasesHauteur = 10;
    Ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define nbreCasesLargeur 10
    #define nbreCasesHauteur 10
    A ce moment là seulement, BCB accèptera de construire ton tableau.

    Sinon avec une matrice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TButton ***tabButton;
    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;
            //...
            }
        }
    Dans ce cas, ne pas oublier de gérer la destruction des tableaux !

    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 !

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    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

  6. #26
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Citation Envoyé par cedni Voir le message
    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.

  7. #27
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    j ai lancé une idée sur ton topic

  8. #28
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Citation Envoyé par cedni Voir le message
    j ai lancé une idée sur ton topic
    Merci, effectivement j'ai vu ... j'avoue que je n'ai pu passer du temps la dessus aujourd'hui (encore un truc que je verrais ce WE malheureusement, ca), mais merci en tout cas.

  9. #29
    Membre habitué Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Points : 181
    Points
    181
    Par défaut
    Citation Envoyé par henderson Voir le message
    Salut !

    Connues donc au sens de constantes !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const int nbreCasesLargeur = 10;
    const int nbreCasesHauteur = 10;
    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:
    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];
    merci.

  10. #30
    Membre habitué Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Points : 181
    Points
    181
    Par défaut gros problème de code
    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??

    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;
    }
    un indice cela me génère une violation d'accès

    bonne chance... lol...

  11. #31
    Membre habitué Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Points : 181
    Points
    181
    Par défaut
    pour la partie de cache cache c'est bon j'ai pu trouver l'erreur en tanonant un peu

  12. #32
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    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 !

  13. #33
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    l index 0 , le premier , etait ce celà ?

  14. #34
    Membre habitué Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Points : 181
    Points
    181
    Par défaut
    Citation Envoyé par cedni Voir le message
    l index 0 , le premier , etait ce celà ?
    non en fait j'ai pas bien compris d'ou ça venait j'ai modifié 2-3 trucs un peu au bol

    ET CA MARCHE!!!!


    donc voila



    pour l'index à 0 c'est normal car pour aller chercher une info dans un tableau, il faut l'attaquer par le 0 pour la premiere case...

  15. #35
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    ben explique concretement , c est tjrs interessant de resoudre un probleme

  16. #36
    Membre habitué Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Points : 181
    Points
    181
    Par défaut
    Citation Envoyé par cedni Voir le message
    ben explique concretement , c est tjrs interessant de resoudre un probleme
    ok je veux bien vous montrer le code

    le .cpp
    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;
    }
    et le .h
    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

  17. #37
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    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

  18. #38
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut Creation dynamique d'objet a l'infinie
    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 : 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();
     
    };
    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
    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;
     
       }
    }
    comment remédier a ce problème !.

    Merci

  19. #39
    Membre habitué Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Points : 181
    Points
    181
    Par défaut
    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

  20. #40
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    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 !

Discussions similaires

  1. Action sur des boutons crées dynamiquement
    Par barthelus76 dans le forum SWT/JFace
    Réponses: 13
    Dernier message: 28/06/2007, 20h32
  2. OnClick sur un bouton créé dynamiquement
    Par Jeankiki dans le forum Delphi
    Réponses: 4
    Dernier message: 05/11/2006, 18h44
  3. OnClick d'un Bouton créée dynamiquement
    Par ero-sennin dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/06/2006, 13h52
  4. Réponses: 10
    Dernier message: 03/05/2006, 11h34
  5. Centrer un texte sur une image créée dynamiquement
    Par rigolman dans le forum Langage
    Réponses: 7
    Dernier message: 11/10/2005, 17h22

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