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 :

Utilisation du param�tre *Sender


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Par d�faut Utilisation du param�tre *Sender
    Bonjour � tous et � toutes

    Pour les besoins de mon application, je dois cr�er dynamiquement 16 TEdit et leurs affecter un �v�nement OnChange identique aux 16. En m'inspirant de l'article de la Faq de CGI, j'ai pu �crire ceci:

    Fichier Unit1.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    private: 
            TEdit *EditHex[16];
            void __fastcall EditHexOnChange(TObject *Sender);
    Puis dans mon fichier Unit1.c
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::FormCreate(TObject *Sender)
      {
      for (int i = 0; i < 16; i++)
        {
        EditHex[i] = new TEdit(this);
        EditHex[i]->Parent = Form1;
        EditHex[i]->OnChange = EditHexOnChange;
        }
      }
    Mais dans l'�v�nement, je ne sais pas comment faire r�f�rence � l'objet qui a d�clench� celui-ci.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void __fastcall TForm1::EditHexOnChange(TObject *Sender)
    {
        EditASC->Text = ?????
    }
    Je pensais que j'allais pouvoir faire :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    EditASC->Text = Sender->Text;
    Mais �a ne marche pas. Si quelqu'un � une id�e ?

    Grand merci
    Olivier

  2. #2
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    1 268
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 268
    Par d�faut
    Essayes en castant ton Sender en TEdit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    EditASC->Text = ((TEdit*)Sender)->Text;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Par d�faut
    Merci bakaneko et quelle rapidit� !

    Je ne sais pas le tester maintenant mais je le testerai d�s ce soir et je vous tiendrai au courant. Sans oublier le "[R�solu]" si �a marche.

    Encore merci
    Olivier

  4. #4
    R�dacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Ao�t 2002
    Messages
    176
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : Architecte technique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 176
    Par d�faut
    bonsoir

    pour plus de securite:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
       TEdit* pEdit = dynamic_cast<TEdit*>(Sender);
        if (pEdit)
           EditASC->Text = pEdit->Text;
        else
           ....
    Bon courage
    Alain

  5. #5
    Membre �prouv�

    Profil pro
    Cadre
    Inscrit en
    Mars 2006
    Messages
    132
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Cadre

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Par d�faut
    Que signifie le dynamic_cast, je n'avais jamais vu cette syntaxe (d'habitude, j'applique la solution de baka_neko ) ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Par d�faut
    Bonjour � tous

    J'ai essay� le cast de Bakaneko mais �a ne marche pas (dans mon cas !) et pourtant j'avais bien vu d'autres codes avec ce cast sur *Sender. Lorsque j'utilise cette solution, je n'ai acc�s qu'aux propri�t�s et m�thodes de TObject et non � celles de TEdit.

    Par contre, j'ai �galement trouv� la syntaxe du dynamic_cast que dvsoft �nonce et �a fonctionne. Je devais coder:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::EditHexOnChange(TObject *Sender)
      {
      TEdit *EditHEX = dynamic_cast<TEdit *>(Sender);
     
      EditASC->Text = EditHex->Text;
      }
    C'est vrai que je peux faire un test sur EditHEX pour plus de s�curit� mais je n'y avais pas pens�.

    Par contre, je ne comprend pas la diff�rence entre un cast "classique" et un cast dynamique (dynamic_cast) ?

    En tout cas, un grand merci � vous deux pour votre aide et je vous souhaite � tous, avec un peu d'avance, un JOYEUX NOEL.
    Olivier

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 7
    Dernier message: 08/03/2007, 11h08
  2. R�ponses: 1
    Dernier message: 10/05/2006, 09h18
  3. R�ponses: 2
    Dernier message: 21/09/2005, 17h23
  4. probl�me d'utilisation de param�tre
    Par pelelive dans le forum Access
    R�ponses: 2
    Dernier message: 22/06/2005, 14h55
  5. [XSLT] Utilisation de param�tre
    Par stailer dans le forum Format d'�change (XML, JSON...)
    R�ponses: 4
    Dernier message: 10/05/2004, 14h49

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