Image flicker

mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014 - 29 juin 2012 à 12:52
 SIMOOBLM - 10 déc. 2012 à 09:52
Bonjour à tous,
Il y a déjà eu pas mal de questions concernant les problèmes de scintillement quand on déplace ou modifie la taille d'une image ou d'une picturebox. Pratiquement à chaque fois, les réponses tournent autour du double-buffering, et souvent citent un exemple developpé par VB Accelerator. J'ai etudié l'exemple en question. Je peux dire que j'ai compris le principe grosso merdo. J'ai bien essayé de transcrire ça avec les Apis et tout et tout. Mais je m'y perds avec les CreatecompatibleDC, DeleteObject à tout va. De plus, on y utilise une classe et je ne connais pas bien du tout. Dans l'exemple les contrôles utilisés sont en fait des dessins. OK pour illustrer le propos, mais je veux déplacer un contrôle image et modifier sa taille. Il n'a pas de propriété HDC comme une picturebox, pas plus qu'une propriété handle. Alors comment faire?
Existe-t-il sur ce site un morceau de code qui puisse m'aider?
Et puis j'ai aussi essayé de trouver un tuto sur les classes. Je n'ai rien trouvé, ou bien aurais-je-t-il pu mal chercher?


D'avance merci.

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 juin 2012 à 15:18
Bonjour,
Avec un contrôle image, donc ?
Tu subis alors forcément VB6, tel qu'il est et tel qu'il gère son "repaint".


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014
4 juil. 2012 à 09:08
Bonjour UCFoutu,
Toujours à l'affût ...
Eh bien oui je subis, je subis... En effet. Je cherche à déplacer et redimensionner des contrôles images sans ce UCFoutu scintillement(elle était facile celle-la). Comme je l'ai indiqué, je n'ai pas tout bien compris l'exemple donné par VBAccelerator. Des CreateCompatibleDC, DeleteObject, une classe ... Bon. Un brin abscons pour moi. Toutefois, je ne suis pas resté inactif. Sur une Form je mets 1 Timer et 2 picturebox que nous appellerons P1 et P2. Dans P1 je dispose plusieurs contrôles images, chargés avec des images.
Dans le Form_Load, je rencontre déjà un problème. Le BitBilt de P1 vers P2 ne marche pas, ou plus exactement met une image de mon code !! J'ai résolu provisoirement le problème en mettant avant le BitBilt un Show.Me suivi de son DoEvents. Là, ça marche. Mais n'y aurait-il pas une autre solution, disons ... plus élégante ? Cela fait, je déplace P1 pour le rendre invisible à l'écran.
Ensuite, la procédure du Timer détecte éventuellement l'image qui devrait normalement se trouver sous le pointeur. Bon. C'est une petite gymnastique qui met en ?uvre un GetCursorPos, une boucle For Each C in Controls et quelques calculs de positions, mais c'est pas le bout du monde et j'ai déjà fait plus compliqué. Quand je fais un P2_Mouse_Down, je connais alors l'image que je veux déplacer. Le P2_Mouse_Move déplace alors réellement l'image dans P1 et hop ! un petit BitBilt de P1 vers P2 et j'obtiens alors le déplacement de l'image sans flickering. Même principe pour le redimensionnement.
Un autre problème survient lorsque je Minimize l'écran, puis le retablit à sa taille normale. P2 est tout blanc. Tout est effacé. Que faire ? Forcer un Paint ? Mais comment ? Bon. Bref ... Je cherche une solution.
Tout ça ne me plaît pas beaucoup car cela ressemble plus à du bidouillage qu'à de la programmation bien menée. Dans P2 je n'ai pas de contrôle, juste le reflet de P1. Ce qui compte c'est ce qu'on voit à l'écran, ou bien ?
Alors je reviens à ma toute première intervention sur le sujet, pour demander s'il n'existerait pas un bout de code pas trop compliqué qui me permettrait de faire du double-buffering, ce que finalement j'ai essayé de simuler avec mes 2 picturebox, n'est-il pas ? Je suis a peu près sûr que quelqu'un a déjà fait ce genre de chose. Mais je n'ai rien trouvé sur le site.
Voilu. Voili. Voilou...

En attendant une réponse... je souhaite à tous bien le bonjour.
0
merci bien les am
0
Rejoignez-nous