Deplacer un picturebox [Résolu]

Signaler
Messages postés
102
Date d'inscription
lundi 29 décembre 2003
Statut
Membre
Dernière intervention
28 juin 2007
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
salut,
je galère pas mal sur un truc.

je souhaite deplacer un picturebox enfant situé dans un picturebox parent. Sur ce picturebox enfant seront tracées plusieurs courbes,, axes, etc.

je souhaite pouvoir faire glisser l'image à la manière de photoshop, ou tout autre logiciel de qualité en cliquant glissant. Le problème est que je n'arrive pas à faire suivre l'image du picture. Il est facile de déplacer le picture en question sans que celui-ci ne suive la souris mais je ne trouve pas cela très esthétique.
J'ai cherché avec du subclassing en m'aidant de programmes que j'ai dans un bouquin mais là encore, l'image ne suit pas.
Le problème principal est qu'en repositionnant le picturebox à la volée (en redefinissant les propriétés top et left), on change l'origine du repere utilisé pour définir un point de départ et donc un déplacement. Le résultat est complètement erratique.
Comment dois-je m'y prendre?

monsieurlémouche

8 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
124
+1 pour jacques ! Moi non plus je vois pas le rapport avec le subclassing !

Je conseillerai plutôt que de déplacer un picturebox, au dessus d'un autre, ce qui est assez lent, de n'utiliser qu'un seul picturebox, et de tracer dessus l'image que tu veux et gérer le déplacement dans cet unique picturebox. Evite également le recourt à l'autoredraw si possible, qui est plus lent que si tu implémente une technique de double-bufferring un tant soit peu optimisée.

La technique consiste donc à tracer dans un buffer temporaire (qui peut être une picturebox invisible par exemple) l'image que tu veux afficher au final, en gérant la position de l'image à déplacer, puis de copier l'image du picturebox temporaire dans le picturebox visible. Ainsi tu n'as pas d'effet de scintillement désagréable, tu peux optimiser le tracé (ne tracer que ce qui est nécéssaire), et faire le design que tu veux.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Salut,

Rien de ce que tu expliques là n'est vraiment clair !
Si tu veux de l'aide, il va falloir que tu sois très précis sur ce que tu veux faire (avec détails ...) car je ne vois vraiment pas, s'il ne s'agit que tu déplacement à la souris d'une picturebox, ce qu'un sous-classement viendrait faire dans cette affaire !
Messages postés
102
Date d'inscription
lundi 29 décembre 2003
Statut
Membre
Dernière intervention
28 juin 2007

salut,
merci pour vos réponses.

bon, j'en remets une couche.
premièrement: pourquoi le subclassing? bah, pour essayer. non, je blague mais c'est un peu cela. Le subclassing de fenetres (interception des messages windows, c'est bien cela?) me permets, à très peu de frais, de réaliser le redimensionnement et déplacements de controles en phase d'éxecution en traitant le message WM_NCHITTEST, mais comme expliqué dans le premier post, l'image ne suit pas la souris.
deuxièmement: je vais être plus clair. Je souhaite que ma pictureenfant suive la souris, tout simplement.

les conseils de Darksidious me semblent être de très bons conseils, et qui plus est, j'ai compris le principe. Je vais donc m'y coller dans la soirée... pas avant, car mercredi est le jour des enfants.

mercic à vous deux

monsieurlémouche
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Euh....
Juste une question : les deux pictureboxes dont il s'agit sont bien des picturesboxes de TON apllication ?
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
124
Oui le subclassing te permet de faire des choses plus poussées que ce que te permet vb de base, mais dans ce cas là (déplacement de picturebox), je vois pas trop l'intérêt (si ce n'est gagner quelques millisecondes pour l'interception des WM_MOUSE_MOVE, et encore !).

La technique du double-buffering est une technique classique dès que tu veux faire du graphisme pour avoir un rendu optimal tout en évitant les clignotements.
Messages postés
102
Date d'inscription
lundi 29 décembre 2003
Statut
Membre
Dernière intervention
28 juin 2007

en réponse à jmfmarques,
oui les deux picturesboxes font partie de MON application.
et pour le coup, c'est moi qui ne comprends pas le sens de la question...
Messages postés
102
Date d'inscription
lundi 29 décembre 2003
Statut
Membre
Dernière intervention
28 juin 2007

darksidious,
j'ai fait une recherche sur le site avec "double buffering", puis "buffering" mais je n'ai rien trouvé d'interressant. Je cherche des exemples de mise en oeuvre. As-tu une idée pour me lancer dans la bonne direction ?
Mots clefs à chercher ou sources que tu connaîtrais.

merci de ton aide

monsieurlémouche
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
124
regarde sur le site vbaccelerator.com : ils ont déposés une source très intéressante à ce sujet : la comparaison entre un double-buffering manuel et l'auto-redraw de vb (qui est un doublebuffer si on va par là).