cs_coyote
Messages postés45Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention28 novembre 2008
-
13 juil. 2004 à 02:27
cs_Sator
Messages postés351Date d'inscriptionsamedi 7 février 2004StatutMembreDernière intervention 6 octobre 2010
-
14 avril 2008 à 19:30
J'ai créé un userControl que j'utilise dans ma forme principale.
Je veux que ce userControl contienne des zones transparentes mais que tout le userControl (y compris les zones tranparentes) réagissent aux evenements souris une fois sur la form.
Les zones transparantes ne me posent pas de probleme mais elles ne detectent pas les clics souris ....
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 13 juil. 2004 à 08:28
Il faut pour cela intercepter les événements souris.
Place un timer dans un usercontrol avec un intervalle suffisament court pour tester si ta souris est situé dans le rectangle de ton usercontrol ou non (Grâce aux fonctions de l'API GetCursorPos et PtInRect).
Si celle-ci se trouve dans le rectangle de ton usercontrol, alors capture les événements souris par l'appel de la fonction de l'API SetCapture.
Ensuite, tout les événements de ta souris seront redirigées vers la fenêtre (ton usercontrol en l'occurence) qui les capture, et tes click, double-clik, etc. seront gérés comme s'il s'agissait d'une fenêtre non transparente.
Enfin, lorsque ta souris n'est plus dans le rectangle de ton usercontrol, libère les événements souris en appelant la fonction de l'API ReleaseCapture.
Tu pourras trouver plus de détails sur ces fonctions, ou des exemples concret en téléchargeant ProgOtoP API Viewer.
cs_coyote
Messages postés45Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention28 novembre 2008 14 juil. 2004 à 19:33
Ton idée est bonne mais le probleme c'est que mon userControl n'a pas une forme réguliere (plutot genre patate qui a poussé à iroshima) (pour cela, j'applique une région a mon userControl grace à l'API SetWindowRgn).
Donc Tester si le clic souri est compris dans le rectangle du userControl n'est pas valable; et l'algo qui vérifirait si le clic est dans la patate est trop complexe.
une autre idée?
J'avais pour idée de mettre un label transparent dans le userControl et qui couvrirait tout son espace. Mais lui aussi ne detecte pas les clic quand le userControl est transparent...