Evenement souri sur zone transparante

Signaler
Messages postés
45
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
28 novembre 2008
-
Messages postés
351
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
6 octobre 2010
-
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 ....

Quelqu'un a t il une idée?

Merci d'avance
coyote

6 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
125
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.

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
Messages postés
45
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
28 novembre 2008

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...
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
125
Ah ce moment là, utilise la fonction de l'API PtVisible : elle permet justement de savoir si un point est à l'intérieur d'une région ou non.

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
Messages postés
351
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
6 octobre 2010

Pourrais-tu nous en dire plus car Progotop.com et co... sont au aboné absent absent me concernant... merci

:)Sator :)

ps: si il ni avait pas de faute d'orthographe dans ce texte, il y a fort à parier que ce texte ne serait pas de moi...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
PtInRegion ou PtVisible sur google te donne la documentation MSDN en premier résultat...

http://msdn2.microsoft.com/en-us/library/ms536645(VS.85).aspx
http://msdn2.microsoft.com/en-us/library/ms532594(VS.85).aspx

après, a voir si ton controle peut passer par la méthode dcrite ici :
http://www.vbfrance.com/codes/CLICK-SUR-CONTROLES-WINDOWLESS-TRANSPARENTS_42562.aspx
Messages postés
351
Date d'inscription
samedi 7 février 2004
Statut
Membre
Dernière intervention
6 octobre 2010

Merci à vous tous et vous tien au courant.
Merci vraiment

:)Sator :)

ps: si il ni avait pas de faute d'orthographe dans ce texte, il y a fort à parier que ce texte ne serait pas de moi...