Deplacer un picturebox [Résolu]

monsieurlemouche 102 Messages postés lundi 29 décembre 2003Date d'inscription 28 juin 2007 Dernière intervention - 6 juin 2007 à 04:17 - Dernière réponse : cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention
- 6 juin 2007 à 16:17
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
Afficher la suite 

Votre réponse

8 réponses

cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 juin 2007 à 08:27
+3
Utile
+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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_DARKSIDIOUS
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 6 juin 2007 à 07:53
0
Utile
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 !
Commenter la réponse de jmfmarques
monsieurlemouche 102 Messages postés lundi 29 décembre 2003Date d'inscription 28 juin 2007 Dernière intervention - 6 juin 2007 à 09:08
0
Utile
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
Commenter la réponse de monsieurlemouche
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 6 juin 2007 à 09:20
0
Utile
Euh....
Juste une question : les deux pictureboxes dont il s'agit sont bien des picturesboxes de TON apllication ?
Commenter la réponse de jmfmarques
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 juin 2007 à 09:24
0
Utile
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.
Commenter la réponse de cs_DARKSIDIOUS
monsieurlemouche 102 Messages postés lundi 29 décembre 2003Date d'inscription 28 juin 2007 Dernière intervention - 6 juin 2007 à 09:33
0
Utile
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...
Commenter la réponse de monsieurlemouche
monsieurlemouche 102 Messages postés lundi 29 décembre 2003Date d'inscription 28 juin 2007 Dernière intervention - 6 juin 2007 à 13:39
0
Utile
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
Commenter la réponse de monsieurlemouche
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 6 juin 2007 à 16:17
0
Utile
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à).
Commenter la réponse de cs_DARKSIDIOUS

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.