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 :

[BCB6]Postmessage & MDI


Sujet :

C++Builder

  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut [BCB6]Postmessage & MDI
    Bonjour,

    J'ai une application pricipale qui contient des fenêtres MDI.
    Je voudrais qu'un composant d'une fenêtre MDI 'A' envoie un message à un autre composant d'une autre fenêtre MDI 'B'.

    Problème:
    Le composant de la fenêtre MDI 'A', ne connait pas le Handle de la fenêtre MDI 'B' !


    J'ai essayer d'envoyer un message à la fenêtre principale
    PostMessage( Application->Handle, ... )
    en espérant qu'elle le redistribuerait aux fenêtres MDI... mais non !

    Y a forcément une solution mais laquelle ?


    Merci d'avance

  2. #2
    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 !

    La propriété Handle (TWinControl::Handle) devrait normalement le fournir.

    A plus !

  3. #3
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    Salut,

    apparemment je ne saisis pas bien la solution:

    J'ai programmé
    PostMessage( Handle (TWinControl::Handle), MON_MESSAGE, 0, 0 );

    et là j'ai un message d'erreur du genre:
    "Appel à une non-fonction"

    alors j'ai essayé:
    PostMessage( TWinControl::Handle, MON_MESSAGE, 0, 0 );

    et ben le destinataire ne réagit pas.

    J'ai fouillé dans l'aide et je sui tombé sur :
    typedef [handle] typename;
    handle_t __RPC_USER typename_bind (typename);
    void __RPC_USER typename_unbind (typename, handle_t);

    Je ne sais pas si c'est de cette propriété là que tu me parles. En tout cas l'utilisation de ce machin ne coule pas de source (C++ tant qu'à faire)

    @+


  4. #4
    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 !

    Handle est une propriété héritée de TWinControl (j'ai cru bien faire en le précisant en bleu).
    Donc si l'objet, disons TonObjet, dérive de TWinControl dans ce cas, le Handle est obtenu simplement en faisant :

    TonObjet->Handle.

    A noter que cette propriété est assortie d'un mécanisme qui, à la lecture, crée un handle si ce dernier n'existe pas.

    Pour plus d'info, voir l'aide à propos de TWinControl/Propriétés : Handle

    A plus !

  5. #5
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    Bonjour,

    MonObjet->Handle, j'y avais pensé, mais le problème, c'est que le composant qui doit communiquer avec l'autre composant ne fait pas partie de la même fenêtre MDI, et donc pas de la même classe.

    Donc je m'étais dis qu'en utilisant le mécanisme de messagerie Windows, j'enverrai un message dans l'application et le composant qui serait intéressé saurait quoi en faire.

    Sinon j'ai toujours la possibilité d'initialiser des pointeurs pour mettre en liaison des composants des différentes fenêtres mais je trouve que c'est fastidieux. Je pense que la solution de la messagerie ets plus élégante.

    Merci de me soutenir, et @+ je l'espère...

  6. #6
    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 !

    Depuis la MDI_A pour atteindre la MDI_B :

    PostMessage(MDI_B->LeComposant->Handle, ...)

    A plus !

  7. #7
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    C'est bon, j'ai trouvé ce que je voulais, finalement c'est très simple:

    for ( divers = Screen->FormCount -1; divers; divers-- )
    PostMessage( Screen->Forms[divers]->Handle, MON_ID_MESSAGE
    , 0, 0 );

    Cette boucle envoie le message à toutes les fenêtres de l'application.
    Celles qui se sentent concernées par ce message réagissent.

    Ceci permet d'envoyer des messages de fenêtre à fenêtre sans avoir besoin de connaitre la cible, ou l'adresse de la classe TForm.

    Merci Henderson pour ton aide.

    @+

    Rémy

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

Discussions similaires

  1. [VB6] [MDI] Signaler la fermeture d'une fille à la mère
    Par cpri1shoot dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2004, 08h57
  2. [MDI] comment fermer la bonne fenêtre enfant ?
    Par KThrax dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2002, 09h42
  3. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  4. pb fenêtre MDI
    Par dédé dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/06/2002, 18h41
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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