Scintillement sur image background d'une form

VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 6 septembre 2019 - 11 août 2010 à 15:02
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Derniè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...

Merci

11 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
11 août 2010 à 15:21
Ton image est peut être trop lourde, trop grande ?

A quelle moment as-tu ces scintillements ? Lors d'un redimentionnement ? Ton background est-il en stretch ?


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Derniè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...
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
11 août 2010 à 16:54
En effet, pourtant le DoubleBuffered est sensé résoudre ce problème.

Et si tu dessine toi même le background de ton formulaire à l'événement Paint ? Comment réagie l'application ?

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Derniè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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Derniè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
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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.
0
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Derniè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...

Une idée ?
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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 :

Panel4.Parent = Panel1
Panel5.Parent = Panel2
Panel6.Parent = Panel3

Panel1, Panel2, Panel3 étant les panel ancrés à ton formulaire, les autres étant des panels de contenu :


Panel4.Parent = Panel2
Panel5.Parent = Panel3
Panel3.Visible = False.

Après ce n'eqt qu'une idée, j'ai pas testé pour voir la réaction non plus mais je pense que cela devrait marcher.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 6 septembre 2019
12 août 2010 à 17:03
Ca ne fonctionne pas...malheureusement. Je vais essayer d'autres choses.
Merci
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
12 août 2010 à 17:36
Pourquoi cela ne fonctionne pas ? Tu as toujours des 'scintillements' ?

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 6 septembre 2019
12 août 2010 à 18:09
Oui, c'est exactement pareil...
Je viens d'essayer d'autres choses mais je n'y arrive pas.
Oh rage, oh désespoir...
0
Rejoignez-nous