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 :

Création de son propre message dans un formulaire


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Création de son propre message dans un formulaire
    Bonjour, je ne sais pas trop comment exprimer cela mais je vais essayer d'être compréhensible :

    j'ai un formulaire tout simple avec par exemple un label au milieu.

    j'ai un autre formulaire avec un simple bouton

    je voudrais qu'en cliquant sur le bouton cela envoit un message avec paramètre à mon premier formulaire et que ce message fasse executer une procédure qui changera le caption du label.

    Mais je ne veux pas passer par un appel direct, je tiens réellement à envoyer un message (comme quand le systeme envoit un message à la fenêtre pour un repaint par exemple).

    Pourriez vous m'eclairer ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Je pense que tu dois créer un message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define MY_MESSAGE WM_USER + 10
    que ton formulaire 1 envoie au formulaire deux.
    Dans le MESSAGE_MAP du formulaire 2 du défini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        MESSAGE_HANDLER(MY_MESSAGE ,TMessage,On_MY_MESSSAGE)
    et donc l'unit de la forme


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm2::On_MY_MESSSAGE(TMessage& Msg)
    {
        // Traitement du message
        TForm::Dispatch(&Msg);
     }

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ton aide je vais voir si ca peut m'aider, mais je pense que c'est ce que je recherche.


    Est-il possible de passer un paramètre(comme une string qui sera recuperée) avec le message ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu peux passer ce que tu veux (avec des précautions bien sur) en utilisant wParam et lParam de ton message. Par exemple l'adresse d'une zone mémoire obtenue avec new et que tu libèreras ensuite

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bon je bute sur la facon d'envoyer le message du form1 vers le form2

  6. #6
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Bonjour,

    Citation Envoyé par androme
    Bon je bute sur la facon d'envoyer le message du form1 vers le form2
    Il faut que tu récupère le handle de la form2, et ensuite utiliser PostMessage pour lui envoyer un message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      PostMessage(Form2->Handle, MY_MESSAGE, 0, 0);

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Vous assurez trop les gars, je débute et heureusement que vous êtes là ;-)

    ca marche nickel !!

    Est-il possible de passer une String comme paramètre dans WParam ?

  8. #8
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Si je ne dis pas de connerie, les deux paramètres LPARAM et WPARAM doivent être de type DWORD; donc la réponse est NON.

    Par contre ce que tu peux faire c'est passer un pointeur sur une zone mémoire allouée (enfin je crois).

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Je n'arrive pas à passer une string en paramètres avec un pointeur. je sèche

  10. #10
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Voici un exemple simplle que j'ai fait sur une forme, mais tu pourrais l'adapter facilement sur deux formes:

    .h
    .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
     
    //Lorsque je poste le message
    Buffer = (char *)malloc(sizeof(char) * 10);
    memcpy(Buffer, "Test\0", 5);
    PostMessage(Form1->Handle, WM_MONMESSAGE (DWORD)Buffer, NULL);
     
    //Réception du message
    void __fastcall TForm1::WndProc(Messages::TMessage &Message)
    {
    if (Message.Msg == WM_MONMESSAGE)
    {
      char *Temp;
      Temp = (char *)Message.WParam;//Je récupère un pointeur sur la zone mémoire allouée avant le PostMessage
      ShowMessage(Temp); //Ca affiche Test
    }
    else{}
     
      TForm::WndProc(Message);
    }
    N'oublies pas de faire les libérations nécessaires. Moi j'ai juste montré comment faut faire ;-)

    Bon courage

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 135
    Points : 61
    Points
    61
    Par défaut
    Salut moi ce que je fait, j'inclu le '.h' de ton formulaire qui contien ton Label dans le formulaire qui contient ton Boutton, puis sur l'action OnClick par exemple tu mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1->[nom de ton label]->Caption="Ton texte";
    en fait je sais pas vraiment si c'est exacte sa que tu veut faire mais cette methode a le merite d'etre tres simple a mettre en oeuvre.

  12. #12
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Citation Envoyé par belfaigore
    Salut moi ce que je fait, j'inclu le '.h' de ton formulaire qui contien ton Label dans le formulaire qui contient ton Boutton, puis sur l'action OnClick par exemple tu mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1->[nom de ton label]->Caption="Ton texte";
    en fait je sais pas vraiment si c'est exacte sa que tu veut faire mais cette methode a le merite d'etre tres simple a mettre en oeuvre.
    Je ne pense pas que ca répond à ses besoins, parce que dans le premier post il a bien précisé
    Mais je ne veux pas passer par un appel direct, je tiens réellement à envoyer un message (comme quand le systeme envoit un message à la fenêtre pour un repaint par exemple).

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Dans ta Form2 tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
        char *str = new char[Edit1->Text.Length()+1];
        strcpy(str, Edit1->Text.c_str());
        PostMessage(Form1->Handle, MY_MESSAGE, (DWORD)str, 0);
    }
    //---------------------------------------------------------------------------
    On suppose ici que sur un clik de bouton tu envoies le text d'un Edit

    Dans ta Form1 tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void  __fastcall TForm1::On_MyMessage(TMessage& Msg)
    {
        Label1->Caption = (char *)Msg.WParam;
        delete[] ((char *)Msg.WParam);
        TForm::Dispatch(&Msg);
    }
    Celà suppose que tu aies inclus unit1.h" dans unit2.cpp et unit2.h dans unit1.cpp

    Tu définis le MY_MESSAGE comme je l'ai expliqué plus haut.
    Pour le Message Map tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(MY_MESSAGE,TMessage,On_MyMessage)
    END_MESSAGE_MAP(TForm)
    dans le code de unit1.h

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 135
    Points : 61
    Points
    61
    Par défaut
    Ok d'accord désoler, autant pour moi, j'avais pas vu

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Tout à fait néo41 ;-)

  16. #16
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Je n'avais pas vu le message de néo41. Perso je préfère le message map mais bon tout est à faire de goût.

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Quelle est la différence entre PostMessage et SendMessage ?

  18. #18
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Le PostMessage place un message dans la file d'attente de windows et n'attends pas que le message soit traité, alors que le SendMessage ne rend pas la main tant que le message posté n'ait pas été traité.

    Donc PostMessage esy asynchrone alors que SendMessage est Synchrone.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/04/2007, 19h44
  2. Création de son propre repository
    Par Cooly dans le forum Maven
    Réponses: 1
    Dernier message: 13/03/2007, 19h28
  3. Banniere Message dans un formulaire
    Par Djekill dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2006, 15h08
  4. Suppression de ses propres messages dans une discussion
    Par Kcirtap dans le forum Evolutions du club
    Réponses: 2
    Dernier message: 18/04/2006, 09h37
  5. [C#] Ajouter son propre composant dans Design de VS.Net
    Par yannick_sch dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/08/2004, 12h14

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