ajdw
Messages postés17Date d'inscriptionmardi 29 août 2006StatutMembreDernière intervention16 septembre 2008
-
11 sept. 2008 à 18:10
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
11 sept. 2008 à 21:59
Bonjour à tous,
J'ai fait un UserControl qui contient plusieurs images. Le truc, c'est que j'essai de réaliser une transparence de mon contrôle pour afficher ce qu'il y a sur son Parent. Jusqu'ici, tout va bien.
Grâce à StretchBlt et TransparentBlt, j'arrive à mon résultat. Cependant, il y a un hic : ca ne fonctionne que s'il y a un MsgBox qui s'affiche pendant la fonction.
Pouvez-vous m'aider SVP ? Je pête un plomb là-dessus. Je sais que c'est un prob de raffraîchissement mais je ne vois pas comment y remédier sans avoir à utiliser un MsgBox.
Voici le code :
Public Sub Mettre_En_Fond_Transparent()
'******************************* Partie d'initialisation de l'image de fond ***********************
'Avant de faire un transparent, il nous faut prendre ce qui apparaît derrière le LabelMust
Dim Cnt As Variant
UserControl.BackStyle = 0 'Rend le fond transparent, je ne peux pas le mettre par défaut car cela annule _
l'affichage de mon Label
PtFond.Cls 'PtFond est le PictureBox servant de tampon entre la source et la destination
UserControl.Cls
EventEnabled = False 'Annule tous les événements Resize lié à ce contrôle
i = UserControl.Height
UserControl.Height = i * 2 + 200 'Nécessaire car si les éléments sources et destination ne sont pas visible _
cela ne marche pas
For Each Cnt In UserControl.Controls 'là, je déplace tous les controls du UserControl hors-zone de manipulation
On Error Resume Next
Cnt.Top = Cnt.Top + i
Next
PtFond.Top = i 'Je m'assure que le PictureBox soit bien visible
PtFond.ZOrder (0)
MsgBox "Juste avant de faire la capture. Left : " & UserControl.Extender.Left & " , Top : " & _
UserControl.Extender.Top 'Et voilà le MsgBox que je voudrai éliminer
'ModX et ModY représentent respectivement Screen.TwipsPerPixelX et Screen.TwipsPerPixelY
'Capture du fond du control
StretchBlt PtFond.hDC, 0, 0, UserControl.Width / ModX, UserControl.Height / ModY, _
UserControl.Parent.hDC, UserControl.Extender.Left / ModX, UserControl.Extender.Top / ModY, _
UserControl.Width / ModX, UserControl.Height / ModY, SRCCOPY
UserControl.BackStyle = 1
'Renvoi de l'image sur le fond du UserControl
StretchBlt UserControl.hDC, 0, 0, UserControl.Width / ModX, UserControl.Height / ModY, _
PtFond.hDC, 0, 0, UserControl.Width / ModX, UserControl.Height / ModY, SRCCOPY
UserControl.Height = i 'On ramène à la taille définie le UserControl
EventEnabled = True 'On revalide l'événement Resize
For Each Cnt In UserControl.Controls
On Error Resume Next
Cnt.Top = Cnt.Top - UserControl.Height
Next
PtFond.Top = UserControl.Height
End Sub
Voilà, là, je m'apprête à essayer de faire sans intermédiaire en déplaçant directement le UserControl. Mais j'aimerais quand même comprendre pourquoi ce cas de figure ne fonctionne pas et comment y remédier.
ajdw
Messages postés17Date d'inscriptionmardi 29 août 2006StatutMembreDernière intervention16 septembre 2008 11 sept. 2008 à 21:40
Eeeeenoooooooorme !!!!!
Super, je te remercie, ca règle définitivement mon problème.
J'ai juste un truc à te demander si ce n'est pas trop. Peux-tu m'expliquer le fonctionnement et l'utilité (mis-à-part ici pour régler mon prob) en quelques mots ?