-
[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' !
:piou:
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 !:marteau:
Y a forcément une solution mais laquelle ? :?
Merci d'avance
-
Salut !
La propriété Handle (TWinControl::Handle) devrait normalement le fournir.
A plus !
-
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); :roll:
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)
@+
-
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 !
-
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...:D
-
Salut !
Depuis la MDI_A pour atteindre la MDI_B :
PostMessage(MDI_B->LeComposant->Handle, ...)
A plus !
-
C'est bon, j'ai trouvé ce que je voulais, finalement c'est très simple: :mouarf:
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. 8-)
Merci Henderson pour ton aide.:merci:
@+
Rémy