J'utilise une bibliothèque tierce qui utilise beaucoup de threads.Envoyer un message directement à partir d'un thread à un objet sans utiliser le formulaire principal
Je viens de commencer à utiliser des messages pour communiquer de nouveau avec le thread principal à partir d'un thread. Tout fonctionne, mais en utilisant SendMessage la façon dont je décris ci-dessous semble lourde car le formulaire principal doit envoyer tous les messages. Y at-il un moyen d'envoyer un message directement à un cadre ou un objet, sans dépendre du formulaire principal?
au démarrage du programme:
MyMessageNumber1 := RegisterWindowMessage('MyUniqueID1');
MyMessageNumber2 := RegisterWindowMessage('MyUniqueID2');
Lorsque vous envoyez un message sans aucune donnée, je fais:
SendMessage(Application.MainForm.Handle, MyMessageNumber1)
Ma principale forme a ceci:
procedure WndProc(var Message: TMessage); override;
if (Message.Msg = MyMessageNumber1)
... call a frame or other object's method that handles this particular message
else if (Message.Msg = MyMessageNumber2) then
... call another ....
else
inherited;
En résumé: le Au-dessus de WndProc, il faut en savoir beaucoup plus que je ne voudrais sur tous les messages et à qui les envoyer.
Comment puis-je envoyer un message directement à partir d'un thread de manière à ce que n'importe quel objet puisse le recevoir?
Tous ces messages ne sont associés à aucune donnée. (Nous y reviendrons un autre jour!) :-)
TIA
J'ai du mal à accepter l'idée que WndProc puisse en savoir trop sur les messages. La gestion des messages est le ** travail ** de WndProc. –
#Rob Kennedy - Mais si le WndProc est sous la forme principale (comme je le pensais nécessaire, donc cette question) alors le formulaire principal devrait connaître toutes sortes de détails de code bas niveau afin qu'il puisse leur envoyer des messages. Pourquoi le formulaire principal doit-il connaître les détails internes d'un code de bas niveau alors que, comme le souligne Mason, le code de bas niveau peut explicitement capter le message? – RobertFrank