Background de PictureBox transparent

gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011 - 17 août 2007 à 11:13
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 17 août 2007 à 13:58
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
A voir également:

5 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 août 2007 à 12:07
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 !
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
17 août 2007 à 12:23
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 août 2007 à 12:33
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
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
17 août 2007 à 13:36
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
0

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

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 août 2007 à 13:58
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"
0
Rejoignez-nous