Bonjour,

Cela faisait longtemps que je n'avais pas fait de Delphi et je m'y suis remis sur la version XE4.
Je regarde comment fonctionne les styles en utilisant cette librairie assez connu : https://github.com/RRUZ/vcl-styles-utils
Le problème est qu'il y a encore quelques bugs au niveau des popupmenu et du menu système.

J'ai résolu presque tous les problèmes. Le popup menu est entièrement redessiné, il n'y a pas de flickering, le scrolling du popupmenu fonctionne également.
Tout cela fonctionne avec un hook.

Mais il reste encore un problème. Quand on clic sur un élément, Windows envoie dans la file de message l'ID du menu qui a été activé.
Et comme le menu a été redessiné et peut avoir subi un scrolling, les éléments de dessins ne sont pas la où Windows les voit. Ce qui fait qu'il lance le mauvais menu.

J'arrive à intercepter le message pour ne pas l'envoyer au popupmenu, à récupérer le HMenu du menu, ainsi que l'ID réel en fonction de la position du clic de souris.
Donc presque tout fonctionne sauf que je n'arrive pas à envoyer le message au popupmenu.

En regardant le fichier Vcl.Menus.pas, je pense que c'est le TPopupList qui attend le message WM_COMMAND avec l'ID du menu dans wParam pour exécuter le clic. Pour le TVclStylesSystemMenu c'est un WM_SYSCOMMAND qu'il attend.

J'ai essayé la commande suivante. Je pense qu'il ne fonctionne pas car le handle n'est pas le bon.
Je ne sais pas comment récupérer le handle permettant d'envoyé le message au popupmenu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SendMessage(handle, WM_COMMAND, Items[FKeyIndex].ID, 0);
J'ai également essayé de modifier directement le message que je reçois dans le hook mais visiblement, mes modifications ne sont pas prises en compte pour le message envoyé au TPopupList
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Message.WParam := FKeyIndex;
Le hook est fait sur le '#32768' et les récepteurs de message que j'ai identifié semblent être TPopupList (popupmenu) et TVclStylesSystemMenu (menu système).

Est-ce bien à cause du handle que le message n'est pas reçu ?
Si je ne laisse pas passer le message, les récepteurs ne le reçoivent pas mais quand je le modifie, ils ne récupèrent pas la modification.
Comment faire pour envoyer le message aux récepteurs ?
Et enfin, comment pour déterminer le type de récepteur ?

Je mettrais le code final sur Github quand il fonctionnera.

Merci d'avance pour votre aide.