Page 1 sur 1

[CanvasGadget] MouseMove en dehors du Canvas ?

Publié : ven. 05/oct./2012 13:45
par grabiller
Bonjour,

Connaissez-vous un moyen natif à PureBasic pour recevoir le #PB_EventType_MouseMove sur un CanvasGadget quand il a le focus, même quand la souris est en dehors du Canvas ?

Si il n'y a pas de moyen natif à PureBasic, une suggestion peut-être avec les API Windows, Linux et Mac OS/X ?
(je dois trouver une solution crossplatform).

Re: [CanvasGadget] MouseMove en dehors du Canvas ?

Publié : ven. 05/oct./2012 19:18
par Ar-S
#PB_EventType_MouseMove detect le mouvement de la souris dans un canvas, c'est son rôle. Je ne vois pas comment faire en sorte qu'il capture des positions de curseurs hors canvas.
Si ce que tu veux et savoir ou se trouve le curseur (mais ta demande n'est pas très précise)
J'entrevois plusieurs solution,
- soit un canvas par bouton/gadget comme dans ta GUI mais utilisant x canvas
- soit une capture de la position du curseur dans la fenêtre mais je n'ai pas de solution cross-platform sous la main.

Re: [CanvasGadget] MouseMove en dehors du Canvas ?

Publié : ven. 05/oct./2012 20:31
par nico
La solution standard avec les API Window est:

Setcapture(WindowID(...))
et ReleaseCapture()

Voir MSDN ici:
http://msdn.microsoft.com/en-us/library ... s.85).aspx

Re: [CanvasGadget] MouseMove en dehors du Canvas ?

Publié : ven. 05/oct./2012 23:07
par Backup
...........

Re: [CanvasGadget] MouseMove en dehors du Canvas ?

Publié : sam. 06/oct./2012 2:09
par grabiller
Merci pour vos réponses.

En fait, oui, je me rends compte que j'ai mal exprimé ma question ou pas assez précisément.

Pas très grave, finalement j'ai résolu mon problème avec un Timer et DesktopMouseX() & DesktopMouseY(), et au moins c'est crossplatform.

(c'est dans le cadre d'un "eye dropper" pour sélectionner une couleur visible à l'écran).

@Dobro
Oui mais ta préférence ne permet pas de recevoir les messages Windows alors que SetCapture, oui.

Re: [CanvasGadget] MouseMove en dehors du Canvas ?

Publié : sam. 06/oct./2012 14:50
par nico

Code : Tout sélectionner

Timer et DesktopMouseX() & DesktopMouseY()
Oui c'est ce que je voulais t'écrire mais j'ai tellement l'habitude d'utiliser les API de Window que j'avais oublier la correspondance pour GetcursorPos.

Re: [CanvasGadget] MouseMove en dehors du Canvas ?

Publié : sam. 06/oct./2012 15:01
par Backup
grabiller a écrit :@Dobro
Oui mais ta préférence ne permet pas de recevoir les messages Windows alors que SetCapture, oui.

je vois pas le rapport ...

tu demande a récupérer les coordonnées du curseur souris , ç'est ce que ça fait !

pour récupérer les messages windows de ton application tu as WindowEvent()

quoiqu'il en soit, je prefere utiliser une fonction qui aille a l'essentiel , plutot qu'une fonction, qui finira par utiliser celle-ci ..
pas mal d'Api en utilise d'autres ....

Re: [CanvasGadget] MouseMove en dehors du Canvas ?

Publié : sam. 06/oct./2012 15:32
par grabiller
@Dobro

Non mais ma question était mal posée, nico à répondu en tenant compte de ma requête de recevoir un mouse event, c'est juste que tu as préféré une solution qui ne tenait pas compte de cela, je soulignais juste la différence.

Rien de grave, encore une fois. Au final j'utilise un timer et les deux fonctions natives de PB (que tu aurai du proposer si tu aimes aller à l'essentiel ;) mais là je te taquine).

Mes remerciements pour les réponses incluaient la tienne.

Re: [CanvasGadget] MouseMove en dehors du Canvas ?

Publié : sam. 06/oct./2012 16:16
par Backup
grabiller a écrit :@Dobro
nico à répondu en tenant compte de ma requête de recevoir un mouse event, c'est juste que tu as préféré une solution qui ne tenait pas compte de cela,
exacte :)