Scintillement, transparence et background en .Net - HELP ME PLEASE !!!! :-)

UniversZen Messages postés 2 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 14 novembre 2008 - 13 nov. 2008 à 11:42
BadoqueAlex Messages postés 129 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 6 juin 2009 - 6 juin 2009 à 13:56
Bonjour à tous,

Après plusieurs heures de vaines recherches, j'en appelle à votre science.

Ma form utilise une image de fond dont les bords sont arrondis, donc :
- BackgroundImage : mon image
- BackgroundImageLayout : none
- BackColor : Desktop
- FormBorderStyle : none
- TransparencyKey : Desktop
- Size : celle de l'image

Pas de pb, j'obtiens bien ce que je veux : une form aux bords arrondis avec mon image dans le fond.

Par contre au chargement de cette form tous les contrôles transparents posés dessus se dessinent en 2 étapes : d'abord tout noir et ensuite transparent ...

Ca clignote donc franchement ... un vrai SAPIN DE NOEL !!! 

J'ai tenté pas mal de trucs simples mais rien de bien satisfaisant ... Je ne sais plus quoi faire sinon abandonner les bords arrondis (et donc la transparence de ma form principale) ...

Vous auriez une idée ????

Merci d'avance.

PS : projet VB.Net (sous VS2008) : http://universzen.free.fr/Tests_anti-flicking.zip
A voir également:

3 réponses

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
13 nov. 2008 à 12:21
Bonjour,

''' <summary>

''' pour avoir des coins arrondis

''' </summary>

'''

''' <remarks></remarks>

Sub EraseCoin(
ByVal radius
As
Integer)

' Dim radius As Integer = 15

Dim frmToRnd
As System.Windows.Forms.Form =
Me

Dim regionRects(radius * 2 + 2)
As System.Drawing.Rectangle

Dim circle
As
New Bitmap(radius * 2, radius * 2)

Dim g
As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(circle)g.Clear(Color.White)

g.FillEllipse(Brushes.Black, 0, 0, circle.Width, circle.Height)

Dim col
As
Integer = 0

For row
As
Integer = 0
To radius - 1

For col = 0
To radius - 1

If circle.GetPixel(col, row) <> System.Drawing.Color.FromArgb(255, 255, 255, 255)
Then
Exit
For
NextregionRects(row * 2) New System.Drawing.Rectangle(col, row, frmToRnd.Width - 2 * col, 1)regionRects(row * 2 + 1)

New System.Drawing.Rectangle(col, frmToRnd.Height - row - 1, frmToRnd.Width - 2 * col, 1)

NextregionRects(radius * 2 + 2) =

New System.Drawing.Rectangle(0, radius, frmToRnd.Width, frmToRnd.Height - circle.Height)

Dim myPath
As
New Drawing2D.GraphicsPathmyPath.AddRectangles(regionRects)

frmToRnd.Region =

New Region(myPath)

End
Sub

a+
0
UniversZen Messages postés 2 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 14 novembre 2008
14 nov. 2008 à 10:18
Merci gillardg, ton code améliore légèrement les choses puisque je peux charger ma form sans transparence.

Par contre ça ne résoud pas tout : maintenant, au lieu d'être noirs puis transparents sur l'image de fond, mes composants sont transparents sur le bureau puis transparents sur l'image de fond ...
Je ne sais pas si c'est très clair donc :
- avant : composant noir puis transparent 'normalement' (donc laissant apparaître l'image de fond)
- maintenant : transparent sans tenir compte de la form (laissant apparaître le bureau) puis transparent 'normalement' (donc laissant apparaître l'image de fond).

Le clignotement est donc moins gênant (mieux vaut des zones de la couleur du bureau que des zones noires) mais il est toujours présent et gênant ...

D'autres idées ????

Allez-y, maltraitez mon code, mais faut que ça s'affiche 'softly' !

A+.
0
BadoqueAlex Messages postés 129 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 6 juin 2009
6 juin 2009 à 13:56
OUI ! LE DOUBLEBUFFERING ...
Essayez d'aller sur la MSDN les gars parce que nombre de vos questions y sont expliquées ...

Tu as deux solutions :

Créer un nouveau composant avec sa propriété DoubleBuffered = True ou alors redéfinir le style de la fenêtre avec le doublebuffering. Tout est dit, à vous de chercher.
0
Rejoignez-nous