VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019
-
11 août 2010 à 15:02
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019
-
12 août 2010 à 18:09
Bonjour à tous,
Voici mon problème, j'ai une image jpg en background de ma form principale de mon application. J'ai pas dessus différents contrôles avec le fond transparent.
J'ai de nombreux scintillements à chaque rafraîchissement d'un contrôle sur la form. C'en est insupportable et surtout pas très pro.
J'ai cherché longtemps en vain...J'ai essayé le doublebuffering, les suspend/resumelayout, la fonction API LockWindowUpdate...rien à faire.
Quelqu'un aurait une solution ou VB.NET est définitivement un outil pourri...
Désolé, je désespère...
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019 11 août 2010 à 16:47
Bonjour Mayzz,
Mon image fait 176ko.
J'ai des scintillements lorsque je joue sur les propriétés visible ou méthode dispose des controls qui sont sur ma form, mais aussi sur le changement de texte d'un label qui est sur la form, bref, sur n'importe quel action sur un des controls de ma form.
Que le background soit en none, stretch, tile, zoom, center, même comportement.
C'est désespérant...
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019 11 août 2010 à 17:36
C'est le même comportement sur l'évènement paint.
J'ai l'impression que le scintillement se fait tout particulièrement lorsque je change la visibilité de mes controls qui sont "dockés" sur la form avec un fond transparent.
Quand un control passe de visible true à visible false, le control placé à côté, prend la place du premier avec dockleft par exemple. Du coup, je comprend qu'il peut y avoir un scintillement à ce moment précis...mais comment l'éliminer?
Je suis en train de faire une petite appli pour mieux analyser le pb.
Vous n’avez pas trouvé la réponse que vous recherchez ?
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019 11 août 2010 à 18:51
Sur ce lien, voici une application test développée en VB2008 express à télécharger (C'est très léger, 300ko) qui met en évidence mon problème :
[url=http://www.sendspace.com/file/4h2dwj]
Les panels à fond transparent dont le docking change sur l'évènement clic d'un bouton affiche un scintillement. J'aimerai l'éliminer!
Le programme est "pur" sans ajout pour améliorer l'affichage puisque je n'en est pas trouvé.
Quelqu'un peut il essayé ?
Merci
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 11 août 2010 à 19:17
Ce que tu appelles scintillement n'en est pas un, mais c'est une réaction tout à fait logique de Visual Basic.
Ce que l'on voit en fait c'est d'abord tes panels apparaitre, puis se positionner au bon endroit. Tu me diras alors, pourquoi ils ne se positionnent pas avant d'apparaitre ? Bien simplement car le positionnement engendré par le Docking se fait en fonction de la visibilité des contrôles et VB a besoin de connaitre les contrôles visibles avant de les déplacer.
Pour preuve, dans ton exemple, clic plusieurs fois sur le second bouton, les premières fois, cela scintille mais pas les autres, car tes contrôles sont déjà en place.
Lors ce que dans ton exemple, tu clic sur le bouton1
Panel3.Visible = False <= Cette ligne est exécuté, il ne reste alors qu'un panel visible le panel5
Donc le formulaire replace le panel5 tout au début du formulaire.
Panel5.Visible = True <= Ici, ce code ne change rien
Panel4.Visible = True <= Puis vient le moment ou un second panel est visible, les contrôles sont alors replacés à nouveau.
En un seul clic sur un bouton, tes panels sont déplacés plusieurs fois. C'est donc que tu emplois une mauvaise méthode pour ce que tu cherches à faire. Essaie autre chose.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019 12 août 2010 à 08:36
Merci Mayzz,
Je comprends tout cela, c'est logique et je le sais.
Cependant, j'aimerais éliminer cet effet et je ne sais pas comment faire, je suis étonné que rien n'existe pour corriger ce phénomène. On voit clairement que l'empreinte du fond d'écran est sur le panel et quand celui prend la place d'un autre il y a un certain temps pour que la nouvelle empreinte du fond d'écran se mette en place alors que le docking du panel est "immédiat".
Bref, pour conclure il faut utiliser une autre méthode mais laquelle ?
- Éliminer le docking, cela ne m'arrange pas du tout!
- faire une copie de l'écran avant changement, l'afficher, effectuer les changement puis supprimer la copie...
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 12 août 2010 à 15:50
Alors je sais pas moi, par exemple tu pourrais laisser les 3 panels, mais juste déplacer toi même les contenus de ceux-ci.
Par déplacer biensur, j'entend mettre un autre pannel (Dock=Fill) à l'intérieur de chacun des 3 panels cités plus haut. Ainsi tu n'aurais qu'à faire un truc du genre :