Background de PictureBox transparent

Signaler
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
Bonjour,

J'utilise VB 6.0.
J'ai placé une grande image (via Picture) sur le fond d'un Form.
J'ai placé un control PictureBox sur ce Form (pour info, lors de l'execution, un cercle plein se dessine dans ce PictureBox, avec un Timer et tout...).
J'aimerais savoir comment je pourrais rendre transparent le fond du PictureBox.
Le rendu final souhaité : le cercle se dessine sur l'image de fond du Form. Le fond du PictureBox est invisible.

merci pour toute aide

5 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
125
pourquoi donc utiliser un pictureBox, et ainsi bouffer des ressources inutilement sachant que tu peux très bien tracer des graphiques sur ton form directement !
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011

mais comment adapter ceci alors ? (je ne suis pas expert)

Private Sub Timer1_Timer()
    vall = vall + 0.2  
    Call affiche_camembert(ctrl)
End Sub

Sub affiche_camembert(camembert As PictureBox)


If vall > 300 Then
    Exit Sub
End If


camembert.Cls
camembert.AutoRedraw = True
camembert.FillStyle = 0
camembert.FillColor = vbRed
If (PI / 2) * vall / 100 < 0 Then
    camembert.Circle (camembert.ScaleWidth / 2, camembert.ScaleHeight / 2), (camembert.ScaleHeight * 0.45), vbYellow, -1.56, (PI / 2) * vall / 100
Else
    camembert.Circle (camembert.ScaleWidth / 2, camembert.ScaleHeight / 2), (camembert.ScaleHeight * 0.45), vbYellow, -1.56, (PI / 2) * (vall - 400) / 100
End If


End Sub
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
125
Pas besoin d'être expert, c'est de la logique : tu remplace tout simplement camembert par ta form :

Dans le form_load :
MeAutoRedraw = True ' pas besoin de le faire à chaque appel !
Me.FillStyle = 0 'idem
Me.FillColor = vbRed 'idem

Private Sub Timer1_Timer()
    vall = vall + 0.2  
    Call affiche_camembert(me)
End Sub

Private Sub affiche_camembert(byref camembert As Form)
Dim valeur As Integer
If vall > 300 Then
    Exit Sub
End If

camembert.Cls

valeur = PI / 2 * (iif((PI / 2) * vall / 100 < 0, vall, vall - 400)) * 100

   
camembert.Circle (camembert.ScaleWidth / 2, camembert.ScaleHeight / 2),
(camembert.ScaleHeight * 0.45), vbYellow, -1.56, valeur

End Sub
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011

Je précisais que je n'étais pas un expert simplement parceque j'avais besoin de détails dans la réponse... que tu as d'ailleurs très gentiment fourni.

J'ai essayé ton code, et effectivement, c'est impeccable.
Le seul souci que j'ai maintenant, c'est que je fais des affichages de contrôles sur le Form (des labels essentiellement), et lorsque le cercle se dessine, ceux-ci se mettent à clignoter... souci de réaffichages successifs j'imagine.... comment puis-je éviter ça ?


 


merci
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
125
En effet, c'est le soucis qui se pose (et qui devait se poser déjà lorsque tu utilisais ton picturebox) : vb retrace d'abord le fond du formulaire avant de tracer les labels vu que les labels sont des contrôles static (il ne possède pas de fenêtre rattaché), je présume que VB fait automatiquement ce qui devrait se faire manuellement : tracer les textes soit même directement sur le Form.

La solution : tracer les labels "à la main" : par code, au lieu de mettre des contrôles labels, trace les par la routine Print de VB à l'endroit voulu :

TaFeuille.CurrentX = 60
TaFeuille.CurrentY = 100
TaFeuille.Print "COUCOU"