PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Deplacement de champ à la souris
Deplacement de champ à la souris
Iniciado por guest, 15,feb. 2007 12:40 - 4 respuestas
Publicado el 15,febrero 2007 - 12:40
Re bonjour,
Voilà, j'ai fait une petite gestion d'evenements permettant à l'utilisateur de déplacer certains champs de la fenetre.
J'arrive donc à "prendre" le champ via le clic gauche, puis à le deplacer via WM_MOUSEMOVE. Mon souci est que si je deplace trop vite ma souris lors du WM_MouseMove, mon champ ne suit plus la souris et du coup, ma gestion d'evenement part dans tous les sens ...
Auriez-vous une solution à cela ? J'avais trouvé un code dans ce forum qui permettait de faire exactement ce que je voulais (deplacement d'objet) et qui fonctionnait parfaitement, mais impossible de le retrouver... si qqun a quelque chose dans ce genre, je suis très intéressé :)
Merci
Publicado el 15,febrero 2007 - 13:47
Salut,

Voici un bout de code que j'ai fait et qui fonctionne.
Bien sûr, ce n'est que pour l'exemple donc après tu peux l'améliorer.
En espérant que ça t'aidera.
A++
Emilie L.


// *** CODE DE LA FENETRE
// Déclarations globales
enMouvement est un booléen
champADeplacer est une chaine


// *** CODE DU CHAMP A DEPLACER
// Bouton gauche enfoncé
champADeplacer = MoiMême..Nom
enMouvement = Vrai
ThreadExécute(MoiMême..Nom,threadNormal,"SourisBouge") // On lance un thread qui gèrera le déplacement

// Bouton gauche relaché
ThreadArrête(MoiMême..Nom,5) // On stop le thread
enMouvement = Faux



// *** LA PROCEDURE APPELEE PAR LE THREAD :
PROCEDURE SourisBouge()

Res, PosX, PosY sont des entiers // Pour récupérer les coordonnées de la souris

xMini, xMaxi, yMini, yMaxi sont des entiers

// On peut définir des bornes à ne pas dépasser,
// pour éviter que l'objet soit déplacé en dehors de l'écran...
xMini = 10
xMaxi = 800
yMini = 10
yMaxi = 600

BOUCLE
Res = CurseurPos(cpEcran)
SI Res <> -1 ALORS

// on récupère la position de la souris
// (NomFenetre à remplacer par le nom de la fenetre...)
PosX = PoidsFaible(Res) - NomFenetre..X
PosY = PoidsFort(Res) - NomFenetre..Y

// on vérifie que l'on ne sort pas de la zone, sinon on bloque
SI PosX < xMini ALORS PosX = XMini
SI PosX > xMaxi ALORS PosX = xMaxi
SI PosY < yMini ALORS PosY = yMini
SI PosY > yMaxi ALORS PosY = yMaxi

// On déplace
{ChampADeplacer,indChamp}..X = PosX - Xmini
{ChampADeplacer,indChamp}..Y = PosY - yMini
FIN

// Quand on relachera le bouton, enMouvement passera à Faux et on sortira de la boucle
SI PAS enMouvement ALORS SORTIR
FIN
Publicado el 15,febrero 2007 - 15:21
Bonjour,

Jète un oeil sur l'exemple "Wd Poignées", ca fait entre autre exactement cela sans (apparemment) partir en sucette.

A+
--
Francis MOREL
Publicado el 15,febrero 2007 - 17:37
C'est parfait Emilie, merci :)
Publicado el 16,marzo 2019 - 15:46
Bonjour Emilie,
12 ans après çà fonctionne toujours.
Merci beaucoup.
Dédé du 27.