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 :

ButtonClick evenement d'un TButton dynamique


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Par défaut ButtonClick evenement d'un TButton dynamique
    Bonjour!

    Je veux faire un programme qui lit plusieurs codes (>120) d´un fichier texte (avec un TStringList), et puis, affiche les codes sur des TButtons. Le nombre de codes et alors de Boutons doit être variable. Quand les boutons sont cliqué, les codes doivent etre passé a un fonction qui est declare dans l'application principale.

    Alors j'essaye de faire un classe TBouton, qui consiste d'un TButton et son ButtonClick evenement. Mais je n´ai pas beaucoup d´experience sur les objects dynamique.

    Voici mon code:


    buttonz.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #ifndef boutonH
    #define boutonH
     
     
    class TBouton {
      public:
        TBouton(String zin);
        TButton *but;
        void __fastcall ButtonClick(TObject *Sender);
    };
     
    #endif
    buttonz.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
    #include <StdCtrls.hpp>
    #include "buttonz.h"
    #include "DynButUnit.cpp"
     
     
    TBouton::TBouton(String nom)
    {
      this->but = new TButton((void *)MainForm);
      this->but->Caption = nom;
    }
     
     
    void __fastcall TBouton::ButtonClick(TObject *Sender)
    {
         MainForm->Fonction(this->but->Caption);
    }
    unit1.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
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    #include "buttonz.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TMainForm *MainForm;
    TBouton *Bouton[20];
     
    //---------------------------------------------------------------------------
    __fastcall TMainForm::TMainForm(TComponent* Owner)
            : TForm(Owner)
    {
      for (int i=0;   i<19; i++)  {
        Bouton[i] = new TBouton("Jaap");
        Bouton[i]->but->Top = i*30;
        Bouton[i]->but->Parent = MainForm;
      }
    }
    //---------------------------------------------------------------------------
     
    __fastcall TMainForm::Fonction(String zin)
    {
      Memo1->Lines->Add(zin);
    }
    Pour voir si ca marche Le fonction (MainForm->Fonction) affiche son parametre (les codes) sur un Memo. Il est declare dans unit1.h comme 'public'

    Problablement, ce code est plein d'erreurs, car quand je compile le programme, ca donne plusieurs warnings. Mais on peut executer et on voit les boutons. Mais quand je clique les bouton, rien se passe.

    Qui peut m'aider?

  2. #2
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Tu as oublié de definir l'evenement du boutton, comme ceci dans le constructeur de ta classe TBouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this->but->OnClick = ButtonClick;

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Par défaut
    Citation Envoyé par pottiez Voir le message
    Tu as oublié de definir l'evenement du boutton, comme ceci dans le constructeur de ta classe TBouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this->but->OnClick = ButtonClick;
    Merci pottiez ,

    Maintenant j'ai moins de 'warnings'. J'ai aussi corrigé un erreur dans la declaration de MainForm->Fonction. Maintenant c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void __fastcall Fonction(String zin);
    Quand je clique les boutons, le Fonction est bien executé: je peux verifier avec un MessageBeep() ou un MessageBox(). Mais quand je veux changer le contenu (ou la visibilite) du Memo, le programme crash. C'est bizar, non?

  4. #4
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Vous devriez n'avoir ni erreur ni warning.

    Il n'y a aucune raison pour que vous ne puissiez pas accéder à votre Memo donc donnez-nous l'instruction qui plante.

    Au lieu d'utiliser String, utilisez plutôt AnsiString qui est un bien meilleur objet pour C++ Builder.

    À bientôt
    Gilles

  5. #5
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Par défaut
    Salut Gilles,

    OK, j'utilise AnsiString maintenant. Le erreur dit:

    Project DynaButton.exe raised exception class EAccessViolation with message 'Acces violation at adress 00401C9C in module 'DynaButton.exe'. Read of address 00002F0'. Process stopped. Use Step or Run to continu.

    On peut continuer, mais on ne voit rien sur le Memo...

  6. #6
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par Flagada Voir le message
    Mais quand je veux changer le contenu (ou la visibilite) du Memo, le programme crash. C'est bizar, non?
    À quel moment vous exécutez ces instructions, où se trouve le code ? Je ne vois pas pourquoi vous n'accéderiez pas à votre Memo. Vous donnez le message d'erreur mais savez-vous l'instruction qui plante ?

    À bientôt
    Gilles

  7. #7
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Par défaut
    Citation Envoyé par Gilles Louïse Voir le message

    À quel moment vous exécutez ces instructions, où se trouve le code ? Je ne vois pas pourquoi vous n'accéderiez pas à votre Memo. Vous donnez le message d'erreur mais savez-vous l'instruction qui plante ?


    OK, je donne le code complet du programme principale:


    DynButUnit.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
    #ifndef DynButUnitH
    #define DynButUnitH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TMainForm : public TForm
    {
    __published:	// IDE-managed Components
            TMemo *Memo1;
            TButton *Button1;
            void __fastcall Fonction(AnsiString zin);
    private:	// User declarations
    public:		// User declarations
            __fastcall TMainForm(TComponent* Owner);
     
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TMainForm *MainForm;
    //---------------------------------------------------------------------------
    #endif




    DynButUnit.cpp (presque le même que untit1.cpp, voir plus haut)
    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
    34
    35
    36
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "DynButUnit.h"
    #include "buttonz.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TMainForm *MainForm;
    TBouton *Bouton[20];
     
    //---------------------------------------------------------------------------
    __fastcall TMainForm::TMainForm(TComponent* Owner)
            : TForm(Owner)
    {
      for (int i=0;   i<19; i++)  {
        Bouton[i] = new TBouton("Jaap");
        Bouton[i]->but->Top = i*30;
        Bouton[i]->but->Parent = MainForm;
      }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TMainForm::Fonction(AnsiString zin)
    {
      MessageBeep(0);                                // pas de problème 
      Application->MessageBox("Salut!", MB_OK) ;     // pas de problème
     
    //-----------------------------------------------------------------
     
      Memo1->Lines->Add(zin);                        // crash!
      Memo1->Visible = false;                        // crash!
      Memo1->Lines->Add("allo!");                    // crash!
      Button1->Visible = false;                      // crash!
    }
    Le problème est TMainForm::Fonction(AnsiString zin). Tout les instructions en haut de la ligne s´execute normalement. Tout les instructions sous la ligne ne peuvent pas etre utilisé, sinon ca plante immediatement...?

  8. #8
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Je pense qu'on a intérêt à dériver de TButton au lieu de modéliser TBouton comme cela est montré ici !
    Ne pas oublier que l'on peut ajouter un constructeur doté des paramètres utiles pour l'initialisation de l'objet.
    A ce stade du développement, on est "Concepteur" et non "Utilisateur" et par conséquent, on a le droit de fixer ses propres règles du jeu (dans les limites du jeu lui-même)!
    Pour la OnClick, si tous les boutons ont la même méthode, dans ce cas il suffit de la rajouter à la classe et de l'affecter à son OnClick, et ce, dans le constructeur !
    Ne pas oublier qu'en cas de méthode partagée par un ensemble d'objets, et ce, pour la méthode OnClick, le Bouton est donné par le Sender et non le this !

    A plus !

  9. #9
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par Flagada Voir le message
    Button1->Visible = false;
    Votre code est correct, il est exécutable chez moi (C++ Builder6 Entreprise), mais vous rendez invisible un certain Button1, qui n'était pas dans l'énoncé. Si donc j'enlève cette instruction (ou si je rajoute un bouton portant ce nom), ça marche. Encore une fois, il n'y a aucune raison pour que vous n'accédiez pas à votre Memo.

    À bientôt
    Gilles

  10. #10
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Par défaut
    Citation Envoyé par Gilles Louïse Voir le message

    Votre code est correct, il est exécutable chez moi (C++ Builder6 Entreprise), mais vous rendez invisible un certain Button1, qui n'était pas dans l'énoncé. Si donc j'enlève cette instruction (ou si je rajoute un bouton portant ce nom), ça marche. Encore une fois, il n'y a aucune raison pour que vous n'accédiez pas à votre Memo.
    Je n'y comprend rien! J'ai aussi C++ Builder6 Entreprise (Win XP, Dell Inspiron 531), et ça marche pas...

    Le Button1 etait pour voir si je pouvais manipuler des autres objects, mais non. C'est la même chose avec un TLabel ou un TEdit. Les rendre visible ou invisible ou changer le texte, tous que j'essaie donne un plantation....

  11. #11
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Pour commencer, les pointeurs de boutons devraient se trouver dans la classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class TMainForm : public TForm
    {
    __published:	// Composants gérés par l'EDI
       TMemo *Memo1;
       void __fastcall Button1Click(TObject *Sender);
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
    TBouton *Bouton[20];
    __fastcall TMainForm(TComponent* Owner);
    void __fastcall Fonction(AnsiString);
    };
    Ensuite, je ne vois pas d’instruction qui connecte le OnClik de chaque bouton, donc il faudrait l’écrire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    __fastcall TMainForm::TMainForm(TComponent* Owner)
       : TForm(Owner)
    {
    for (int i=0;   i<19; i++)
       {
       Bouton[i] = new TBouton("Jaap");
       Bouton[i]->but->Top = i*30;
       Bouton[i]->but->Parent = MainForm;
       Bouton[i]->but->OnClick=Bouton[i]->ButtonClick;
      }
    }
    Pour le reste, en procédant ainsi, ça marche chez moi.

    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
    TBouton::TBouton(String nom)
    {
    this->but = new TButton(Application);
    this->but->Caption = nom;
    }
    //---------------------------------------------------------------------------
    void __fastcall TBouton::ButtonClick(TObject *Sender)
    {
    MainForm->Fonction(this->but->Caption);
    }
    //---------------------------------------------------------------------------
    void __fastcall TMainForm::Fonction(AnsiString zin)
    {
      MessageBeep(0);                                // pas de problème
      Application->MessageBox("Salut!", MB_OK) ;     // pas de problème
     
    //-----------------------------------------------------------------
     
      Memo1->Lines->Add(zin);              // pas de crash!
      Memo1->Lines->Add("allo!");          // pas de crash!
    }
    À bientôt
    Gilles

  12. #12
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Par défaut
    Merci Gilles pour ton aide. Je suis desolé mais ça marche pas. J'ai essaye tous que tu a proposé mais rien ne change. J'ai envie de jeter mon ordinateur par la fenêtre.

  13. #13
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Sinon... je pense que l'on peut organiser tout ceci d'un manière plus simple.
    Bien sûr, j'espère avoir compris ce que l'on cherche à faire ici.

    On va se servir d'une classe dérivée de TComponent pour gérer dynamiquement les boutons.
    Elle va servir de superviseur en lui donnant de quoi :
    - charger un fichier texte
    - en déduire le nombre de boutons (les créer ou les détruire)
    - les positionner automatiquement (le pavé est aligné à gauche sur la fiche)
    - affecter aux boutons une ligne de texte du fichier dans leur Caption
    Ce superviseur sera propriétaire des boutons.

    Le but étant lors du click sur un bouton de transmettre le Caption du bouton à une méthode membre du Superviseur.

    Pour le reste, on suppose l'existance sur la fiche :
    - d'un TOpenDialog pour choisir un fichier texte.
    - d'un TMemo pour faire écho de l'opération (aligné à droite sur la fiche)
    - Un TMainMenu avec quelques items (Ouvrir et Quitter)

    Voici la classe qui va superviser les boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class jSupervisor : public TComponent
    {
    public :
    TStringList *TextFile;
        __fastcall jSupervisor(TComponent *AOwner);
        __fastcall ~jSupervisor();
     
        void __fastcall LoadFromFile(AnsiString FileName);
        void __fastcall ButtonClick(TObject *Sender);
        void __fastcall Fonction(AnsiString N);
    };
    Les méthodes de cette classe :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    __fastcall jSupervisor::jSupervisor(TComponent *AOwner)
        : TComponent(AOwner)
    {
    TextFile = new TStringList;
    }
     
    __fastcall jSupervisor::~jSupervisor()
    {
    TextFile->Clear();
    delete TextFile;
    }
     
    void __fastcall jSupervisor::LoadFromFile(AnsiString FileName)
    {
    TButton *Button;
    int x;
    int y;
    if(FileExists(FileName))
        {
        TextFile->LoadFromFile(FileName);
        //On va réajuster (s'il le faut) le nombre des boutons 
        if(ComponentCount < TextFile->Count)
            {
            while(ComponentCount != TextFile->Count)
                {
                Button = new TButton(this);
                Button->Parent = (TWinControl*)Owner;
                Button->OnClick = ButtonClick;
                //Je les organise en 4 colonnes
                x = ComponentCount-1;
                y = x;
                x = x % 4;
                y = y / 4;
                Button->SetBounds((x * 80) + 20,
                                  (y * 23) + 20,
                                  60,
                                  21);
     
                }
            }
        else
            {
            if(ComponentCount > TextFile->Count)
                {
                while(ComponentCount != TextFile->Count)
                    {
                    delete Components[ComponentCount-1];
                    }
                }
            }
        for(int j = 0; j < ComponentCount; j++)
            {
            ((TButton*)Components[j])->Caption = TextFile->Strings[j];
            }
        TextFile->Clear();
        }
    }
     
    void __fastcall jSupervisor::ButtonClick(TObject *Sender)
    {
    //REM : le Sender est le bouton sur lequel on a cliqué
    Fonction(((TButton*)Sender)->Caption);
    }
     
    void __fastcall jSupervisor::Fonction(AnsiString N)
    {
    Form1->Memo1->Lines->Add(N);
    }
    En ce qui concerne la classe de la form, voici ce que l'on va y rajouter en public

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    jSupervisor *Supervisor;
    AnsiString Filepath;
    Les méthodes pour TForm1 :

    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
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    Supervisor = new jSupervisor(this);
    Filepath = ExtractFilePath(Application->ExeName);
    OpenDialog1->InitialDir = Filepath;
    }
     
    //OnClick d'un menuitem pour ouvrir un fichier
    void __fastcall TForm1::Ouvrir1Click(TObject *Sender)
    {
    if(OpenDialog1->Execute())
        {
        //On purge le TMemo
        Memo1->Lines->Clear();
        //Notre pavé de buttons à partir du fichier
        Supervisor->LoadFromFile(OpenDialog1->FileName);
        }
    }
     
    //OnClose de la form
    void __fastcall TForm1::Quitter1Click(TObject *Sender)
    {
    Close();
    }
    ... en espérant que...

    A plus !

  14. #14
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par Flagada Voir le message
    Merci Gilles pour ton aide. Je suis desolé mais ça marche pas. J'ai essaye tous que tu a proposé mais rien ne change. J'ai envie de jeter mon ordinateur par la fenêtre.
    Je ne vois pax comment c'est possible, en partant d'un projet vierge et en copiant-collant les éléments situés dans ce fil, définition de la classe, méthodes et autres fragments, ça marche immédiatement.

    Pour mémoire, en rouge ce qu'il faut copier-coller (en plus de mettre un TMemo sur la forme et à la nommer MainForm)

    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
    class TBouton {
      public:
        TBouton(String zin);
        TButton *but;
        void __fastcall ButtonClick(TObject *Sender);
    };
    //---------------------------------------------------
    class TMainForm : public TForm
    {
    __published:	// Composants gérés par l'EDI
       TMemo *Memo1;
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
    TBouton *Bouton[20];
    void __fastcall Fonction(AnsiString);
    __fastcall TMainForm(TComponent* Owner);
    };
    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
    __fastcall TMainForm::TMainForm(TComponent* Owner)
       : TForm(Owner)
    {
    for (int i=0;   i<19; i++)
       {
       Bouton[i] = new TBouton("Jaap");
       Bouton[i]->but->Top = i*30;
       Bouton[i]->but->Parent = MainForm;
       Bouton[i]->but->OnClick=Bouton[i]->ButtonClick;
      }
    }
    //-------------------------------------------------------------
    void __fastcall TBouton::ButtonClick(TObject *Sender)
    {
    MainForm->Fonction(this->but->Caption);
    }
    //---------------------------------------------------------
    void __fastcall TMainForm::Fonction(AnsiString zin)
    {
      MessageBeep(0);                                // pas de problème
      Application->MessageBox("Salut!", MB_OK) ;     // pas de problème
     
    //--------------------------------------------------------
    
      Memo1->Lines->Add(zin);              // pas de crash!
      Memo1->Lines->Add("allo!");          // pas de crash!
    }
    //---------------------------------------------------
    TBouton::TBouton(String nom)
    {
      this->but = new TButton((void *)MainForm);
      this->but->Caption = nom;
    }
    À bientôt
    Gilles

  15. #15
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Par défaut
    Citation Envoyé par henderson Voir le message
    Salut !

    Sinon... je pense que l'on peut organiser tout ceci d'un manière plus simple.
    Bien sûr, j'espère avoir compris ce que l'on cherche à faire ici.


    ... en espérant que...

    A plus !

    Merci Henderson. Je vais etudier ton code. Je n'ai pas beaucoup d'experience avec deriver des classes etc. C'est bien d'avoir un example maintenant.

  16. #16
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Par défaut
    Citation Envoyé par Gilles Louïse Voir le message
    Je ne vois pax comment c'est possible, en partant d'un projet vierge et en copiant-collant les éléments situés dans ce fil, définition de la classe, méthodes et autres fragments, ça marche immédiatement.

    Gilles



    Finalement ça marche !!

    J'avais declare la classe TBouton apart dans un unité (buttonz.h et buttonz.cpp, voir plus haut). Je pensait que c'etait comme il faut. Mais apparement quelquechose ne marchait pas bien: quand je ouvrais 'buttonz.cpp' dans BCB6, on voyait seulement 'buttonz.cpp' et pas 'buttonz.h'. Grace a ton aide ça marche enfin.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gerer les evenements de Contrôles créés dynamiquement
    Par celineSGH dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2008, 02h25
  2. Evenement avec control créé dynamiquement
    Par BoyzInDaProject dans le forum MFC
    Réponses: 2
    Dernier message: 01/05/2007, 00h52
  3. evenement sur bouton créé dynamiquement
    Par J@ckHerror dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/03/2007, 04h24
  4. Réponses: 2
    Dernier message: 02/08/2006, 23h54
  5. Réponses: 6
    Dernier message: 18/04/2005, 21h12

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