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. #1
    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 évènements sur plusieurs boutons crées dynamiquement
    bonjour (soir) à toutes et à tous

    dans mon application j'ai du créer 144 boutons (d'où le dynamique...)
    jusque là pas de problème

    ce que je voudrais faire c'est de mettre un évènement commun à tous ces boutons crées dynamiquement

    j'ai donc essayé quelque chose comme ça
    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
     
    	// 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_bouton;
    			// la fenêtre est propriétaire du nouveau bouton
    			bu_bouton = new TButton(this);
    			// et c'est dans Form1 qu'il doit s'afficher
    			bu_bouton->Parent = Form1;
    			// ensuite on définit les autres propriétés
    			bu_bouton->Width = buWidth;
    			bu_bouton->Height = buHeight;
    			bu_bouton->Caption = "";
    			bu_bouton->Left = x;
    			bu_bouton->Top = y;
    			x += buWidth + 8;
    			bu_bouton->OnClick = "TForm1::bu_boutonClick";
    		}
    		y += buHeight + 8;
    		x = 8;
    	}
    c'est donc à la ligne
    bu_bouton->OnClick = "TForm1::bu_boutonClick";
    que ça plante
    que je voudrais mettre l'évènement sur le OnClick du bouton créé


    est-ce que quelqun peut m'aider??


    bonne soirée
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  2. #2
    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
    Bonsoir,

    Il me semble qu'il faut passer par une TActionList, définir une TAction, et faire qqchose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bu_bouton->OnClick = MaForm->MonAction->OnExecute;
    Mais je pense aussi que l'on peut définir une fonction dans le .H qui suive le prototype attendu par le "onClick(...)" et l'affecter a tes "bu_buttons"....
    QQchose comme:
    .H:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private: //pas sur, a voir
    
       void __fastcall MonClick(TObject *Sender);
    .CPP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //en amont
    void __fastcall MaForm::MonClick(TObject *Sender)
    {
       ShowMessage("Je suis un Bu_Bouton !!");
    }
    //puis dans ta boucle
    bu_bouton->OnClick = MaForm->MonClick;

    En esperant t'aider,
    @+
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  3. #3
    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
    je test et redis demain

    merci et a+
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  4. #4
    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
    en effet le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bu_bouton->OnClick = Form1->bu_buttonClick;
    marche parfaitement


    merci

    bonne soirée
    Geko
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  5. #5
    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
    bonjour

    çà c etait une tres bonne question

    parcontre comment fais tu pour retrouver l index du bouton

    je m explique : par exemple , tu as 10 boutons créés dynamiquement et tu veux choper le 7 eme qui juste par hasard remplit une clause , comment concatenes tu cette variable '7' dans le nom du bouton ?

    j espere m etre bien expliquer

  6. #6
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Dans le Tag !

    A plus !

  7. #7
    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
    il faut que tu fasse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bu_button->Name = "bu_monBoutonNo" + "7";
    si j'ai bien compris la question
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  8. #8
    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
    ps: vu que tu as posé une nouvelle question j'ai enlevé le tag Résolu
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  9. #9
    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 : 38
    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
    Citation Envoyé par Mangacker Voir le message
    il faut que tu fasse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bu_button->Name = "bu_monBoutonNo" + "7";
    si j'ai bien compris la question
    Comme l'as dit henderson tu peut mettre le numéro du bouton dans la propriété Tag de chaque bouton
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  10. #10
    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
    oui je comprends

    pour leur donner un nom c est la bonne solution

    en fait je pense m etre mal exprimé , en resonant avec des "edit" , çà sera plus simple :

    Admettons que j ai créé mes 10 edit dynamiquement

    Maintenant l utilisateur va remplir les champ edit

    et ici je voudrais par exemple
    en cliquant sur un bouton ,recuperer les Edit->Text

    meschamps[10]; // un tableau
    for ( i=1 ;i<=10 ; i++ )
    { meschamps[i]=Edit+i->Text; }

    et là çà coince
    Savez vous comment faire , j ai rencontré de nombreuses fois ce probleme ?

  11. #11
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Dans ce cas, le bon réflexe c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString N = "Edit" + IntToStr(i);
    Donc à la construction (faire attention quand même aux doublons):
    Donc pour récupérer le composant via son nom (donc avec le même bon réflexe), tu peux utiliser FindComponent.

    A plus !

  12. #12
    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 ça j'ai entendu dire qu'on pouvait faire des tableaux d'objets

    mais j'ai absolument aucune idée de comment ça marche
    donc si quelqu'un sait je suis preneur


    bonne nuit
    Geko
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  13. #13
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Soit en statique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TEdit *TabEdit[10]; //En global ou ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int j...)
       {
       TabEdit[j] = new TEdit(this);
       }

    Ou bien en dynamique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TEdit **TabEdit = NULL;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(TabEdit != NULL) delete [] TabEdit;
    TabEdit = new TEdit*[10];
     
    for(int j...)
       {
       TabEdit[j] = new TEdit(this);
       }

    Sinon on peut aussi utiliser une TList.

    Mais également un TComponent.
    Dans ce cas, la mise en liste est assurée par le TComponent propriétaire.
    On récupère alors les objets depuis la propriété Components !
    Normalement, le TComponent organise Components dans l'ordre de création (ce serait à vérifier).
    Juste pour montrer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TComponent *TabEdit;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TabEdit = new TComponent(this);
    TEdit *E;
    for(int j = 0...)
        {
        E = new TEdit(TabEdit);
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TEdit* E = (TEdit*)TabEdit->Components[n];

    A plus !

  14. #14
    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
    merci ça devrai résoudre un de mes problèmes
    je test tout de suite
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  15. #15
    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
    me revoila
    j'ai essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // création d'un tableau 2dimensions pour stocker les boutons
    TButton *tabButton[nbreCasesLargeur][nbreCasesHauteur];
    mais ça me génère cette erreur
    [C++ Erreur] ufmMain.cpp(94): E2313 Expression constante nécessaire
    savez - vous pourquoi??
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  16. #16
    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 : 38
    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
    Citation Envoyé par Aide de BCB
    E2313 Expression constante nécessaire Erreur du compilateur
    Les tableaux doivent être déclarés avec une taille constante.
    Cette erreur est généralement causée par une faute de frappe dans une constante #define.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  17. #17
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Dans ce cas, il faudrait compter le nombre d'indirections...

    On a un premier tableau de pointeurs vers les lignes, chaque ligne est un tableau de pointeur vers TButton...

    On est double ou triple ??? Je ne peux pas tester en ce moment !

    A plus !

  18. #18
    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 Mangacker Voir le message
    me revoila
    j'ai essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // création d'un tableau 2dimensions pour stocker les boutons
    TButton *tabButton[nbreCasesLargeur][nbreCasesHauteur];
    mais ça me génère cette erreur


    savez - vous pourquoi??
    Bonsoir,

    Pourquoi faire, au fait, un tableau a 2 dimensions ? Juste pour moi pour comprendre car ... ben, j'ai un cerveau lent (j'aime bien ce jeux de mots nul qui ne vole pas haut, au contraire du cerf-volant).
    Parceque dans le pire des cas, j'ai une idée (si si) mais bon, assez "perso" ... (quoi, qui a dit une usine a gaz ? ;-) )

    ++
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  19. #19
    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
    la 2ème dimension du tableau n'est pas obligatoire
    c'est juste pour y accéder facilement car mes boutons sont tous placés sur une grille 2d

    mais si ça se peut pas de manière conventionnelle ya pas de problème je fairais sans
    /**
    * Author: Tehem
    * Version: 2.0
    */
    Extension Twig pour Symfony 2.1 (Check Defined Constant)
    https://github.com/tehem/TwigConstantExtension

  20. #20
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Tu peux nous montrer ça Sunchaser ?

    Sinon pour :

    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 !

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, 21h32
  2. OnClick sur un bouton créé dynamiquement
    Par Jeankiki dans le forum Delphi
    Réponses: 4
    Dernier message: 05/11/2006, 19h44
  3. OnClick d'un Bouton créée dynamiquement
    Par ero-sennin dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/06/2006, 14h52
  4. Réponses: 10
    Dernier message: 03/05/2006, 12h34
  5. Centrer un texte sur une image créée dynamiquement
    Par rigolman dans le forum Langage
    Réponses: 7
    Dernier message: 11/10/2005, 18h22

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