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 :

Pb Création évènement OnClick


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut Pb Création évènement OnClick
    Bonjour,

    Voilà, j'ai créé des boutons afin de les mettre dans une TStringGrid. Chaque bouton est associé à une ligne de la TStringGrid. L'action de tous ces boutons est la même, j'ai donc créé une fontion OnMyButtonClick que j'associe avec chacun des boutons lors de leur création.
    Mon problème c'est que l'action ne s'effectue pas lorsqu'on clique sur n'importe lequel des boutons.
    Dans mon .h j'ai mis :
    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
    class TForm1 : public TForm
    {
    __published:	// IDE-managed Components
    	TStringGrid *StringGrid1;
    	TButton *Button1;
    	void __fastcall StringGrid1SelectCell(TObject *Sender, int ACol, int ARow,
    		  bool &CanSelect);
    	void __fastcall MyEditChange(TObject *Sender);
    	void __fastcall Button1Click(TObject *Sender);
    	void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    	//void __fastcall OnMyButtonClick(TObject *Sender);
     
    private:
    	//void __fastcall WhenKeyPress(TObject *Sender, char &Key);
        TButton* MyButton[50];
    	void __fastcall OnMyButtonClick(TObject *Sender);
     
    public:		// User declarations
    	__fastcall TForm1(TComponent* Owner);
    	TEdit* __fastcall CreateEdit(TRect R);
    	TUpDown* __fastcall CreateUpDown(TRect R, int Limite);
    	TButton* __fastcall CreateButton(TRect R);
    	void ReInit();
    	void FillIn(AnsiString Sol, Variant WorksheetSolution);
    };
    Dans mon .cpp, dans une de mes fonctions, je crée les boutons de la manière suivante :

    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
    //Création des champs spéciaux de la TStringGrid
     
    	for(int i=IncRepeat ; i<IncCreate ; i++)
    		{
    		//Calcul de la position de l'Edit pour l'afficher en dernière colonne
    		R = StringGrid1->CellRect(4, i+1);
     
    		MyEdit[i] = CreateEdit(R);
    		MyUpDown[i] = CreateUpDown(R,10);
    		MyUpDown[i]->Associate = MyEdit[i];
    		R = StringGrid1->CellRect(0, i+1);
    		MyButton[i] = CreateButton(R);
    		MyButton[i]->Enabled = true;
    		MyButton[i]->OnClick = OnMyButtonClick;
     
    		//Faire apparaître le TEdit, le TUpDown et le TButton
    		MyEdit[i]->Show();
    		MyUpDown[i]->Show();
    		MyButton[i]->Show();
    		}
    Voici la fonction de création de mes boutons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TButton* __fastcall TForm1::CreateButton(TRect R)
    {
    TButton *Button = new TButton(StringGrid1);
    Button->Visible = false;
    Button->Parent = StringGrid1;
    Button->Left = R.Left;
    Button->Top = R.Top-1;
    Button->Width = R.Right - R.Left;
    Button->Caption = "Voir";
    //Button->OnClick = OnMyButtonClick;
    return Button;
    }
    Voilà, j'espère avoir été assez clair dans la description de mon problème et que vous avez la réponse

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,


    Dans sa fonction, il a la dernière ligne MyButton[i]->Show(); qui lui permet de l'afficher.

    Pour ton soucis, essaye dans un premier temps de voir si ta fonction OnMyButtonClick est compilée. Par exemple mets un point d'arrêt dessus. Si quand tu compiles et tu lances le soft, ca reste rouge c'est compilé, sinon la ligne devient verte.

    Si c'est le cas, c'est un problème de déclaration.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    lorsque je compile, le breakpoint reste rouge avec un check vert...
    Sinon la déclaration me paraît bonne.

    ??

  4. #4
    Membre éprouvé
    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 : 54
    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
    Par défaut
    Effectivement, personnellement j'ai déja essayer de faire la même chose, sans succès jusqu'a présent....
    J'avais un peu contourné la chose en dessinant directement dans la grille avec DrawEdge(...) et ses paramètres afin de 'créer l'illusion' mais ce n'etait pas encore l'idéal.
    @ +

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Beh merci, je pensais que c'était possible mais apparemment va falloir trouver une autre solution...

  6. #6
    Membre éprouvé
    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 : 54
    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
    Par défaut
    Citation Envoyé par BigMike
    Beh merci, je pensais que c'était possible mais apparemment va falloir trouver une autre solution...
    Attention, je ne prétends pas avoir la science absolue....juste que la, j'y suis jamais parvenu. Mais je n'utilises peut être pas la bonne méthode...

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    en fait j'ai réussi à contourner le problème :
    j'utilise l'évènement StringGridSelectCell de ma TStringGrid, et j'effectue mes actions seulement si on clique sur les cases de la première colonne, là où mes boutons étaient posés.
    Voilà, au final c'est beaucoup plus simple mais un peu moins classe...

    Merci pour votre aide.

  8. #8
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  9. #9
    Membre éprouvé
    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 : 54
    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
    Par défaut
    Oui tout a fait Maître CGi....mais dans ce cas nous parlions d'objects ayant pour Parent un TStringGrid, et non la TForm directement.
    A l'inverse de ce qui se passe dans le cas ou nous aurions placé le TButton sur un TStatusBar (cela fonctionne ...de mémoire), le TButton est bien crée et positionné mais ne réagis pas du tout lors de l'évenement 'OnClick(...)'

    Merci
    @ +

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Effectivement en mettant comme Parent Form1 au lieu de StringGrid1, tout marche impec.
    Merci beaucoup, c'était vraiment tout bête...

  11. #11
    Membre éprouvé
    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 : 54
    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
    Par défaut
    M'enfin, sur ce, je me casse la tête surement un peu pour rien puisqu'en modifiant un peu le code comme ceci par ex :
    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
     
    TButton* __fastcall TForm7::CreateButton(TRect R)
    {
    TButton *Button = new TButton(this);
    //Button->Name = AnsiString("ZEButton") + (ZList->Count + 1);//
    Button->Parent = this;
    Button->Left = StringGrid1->Left + R.Left+2;
    Button->Top = StringGrid1->Top + R.Top+1;
    Button->Width = R.Right - R.Left;
    Button->Caption = "Voir";
    Button->OnClick = OnMyButtonClick;
    return Button;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm7::OnMyButtonClick(TObject *Sender)
    {
    ShowMessage(  ((TButton*)Sender)->Name );
    }
    On obtiens tout de même des TButtons bien placés sur les 'Cells' de la TStringGrid et qui renvoient, eux, l'évènement OnClck()...

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

Discussions similaires

  1. Création d'un bouton à la volée + événement OnClick
    Par ulysse_31 dans le forum Lazarus
    Réponses: 3
    Dernier message: 25/08/2010, 00h31
  2. événement onclick intempestif d'1 TMenuItem
    Par OutOfRange dans le forum Delphi
    Réponses: 6
    Dernier message: 22/06/2006, 20h46
  3. Changement dynamique de l'évènement OnClick
    Par cluis dans le forum Access
    Réponses: 3
    Dernier message: 22/03/2006, 11h30
  4. Erreur avec l'évènement OnClick de ListView
    Par xenos dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/03/2006, 14h54
  5. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52

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