Envoi d'un message à l'aide de la file d'attente des messages Windows

De RAD Studio
Aller à : navigation, rechercher

Remonter à Envoi des messages


Dans une application multithread, vous ne pouvez pas vous contenter d'appeler la méthode Perform car le contrôle cible se trouve dans un thread différent de celui qui s'exécute. Mais, en utilisant la file d'attente des messages Windows, vous pouvez communiquer en toute sécurité avec les autres threads. La gestion des messages se passe toujours dans le thread VCL principal, mais vous pouvez envoyer un message avec la file d'attente des messages Windows depuis n'importe quel thread de l'application. Un appel à SendMessage est synchrone. C'est-à-dire que SendMessage ne revient que lorsque le contrôle cible a géré le message, même si cela se passe dans un autre thread.

Utilisez l'appel à l'API Windows, SendMessage, pour envoyer un message à un contrôle à l'aide de la file d'attente des messages Windows. SendMessage prend les mêmes paramètres que la méthode Perform, sauf que vous devez identifier le contrôle cible en passant son handle de fenêtre. Ainsi, au lieu d'écrire :

MsgResult := TargetControl.Perform(MY_MYMESSAGE, 0, 0);
MsgResult = TargetControl->Perform(MY_MYMESSAGE, 0, 0);

il faut écrire

MsgResult := SendMessage(TargetControl.Handle, MYMESSAGE, 0, 0);
MsgResult = SendMessage(TargetControl->Handle, MYMESSAGE, 0, 0);

Pour plus d'informations sur la fonction SendMessage, voir la documentation Microsoft MSDN. Pour plus d'informations sur l'écriture de threads multiples pouvant être exécutés simultanément, voir Coordination de threads.

Voir aussi