tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 2011
-
28 juin 2006 à 08:46
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 2011
-
12 juil. 2006 à 16:00
Bonjour à tous,
J'ai une MDI contenant une image de fond dans sa propriété Picture.
J'aimerais que cette dernière est la même taille que la form (FIT TO FORM)
à l'ouverture de la MDI.
Pour faire cela avec un formulaire normal, il faut écrire
Private Sub Form_Resize()
Me.AutoRedraw = True
Me.PaintPicture Me.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeight
Me.AutoRedraw = False
End Sub
Le problème avec la MDI, c'est qu'il n'y a pas de Me.AutoRedraw et encore moins de Me.PaintPicture.
Alors, comment faire..? Sans rajouter de contrôle...
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 28 juin 2006 à 09:33
Là par contre, pour une MDI, tu n'as pas vraiment le choix !
Soit tu passe par une feuille "classique" dont tu utilisera comme une feuille MDI en utilisant la fonction de l'API Windows SetParent, soit il te faut passer par la fonction de l'API StretchBlt pour tracer ton image en grand de la taille de ta fenêtre.
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 28 juin 2006 à 10:33
Merci du conseil, mais je ne vois pas trop comment utiliser cette API pr faire ce que je veux en fait.
j'ai testé ça à partir des exemples que j'ai pû récupérer, mais ça ne marche pas (ça plante pas c déjà ça)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 28 juin 2006 à 11:04
Oulà, ca marche pas tout à fait comme cà : StretchBlt prend un handle de DC, ce qui est un peu différent du handle d'un picture (il me semble !).
Du coup, faut passer par un dc temporaire (le plus simple étant d'utiliser un picturebox invisible dans lequel tu charge l'image), de plus, StretchBlt travaille en pixels et non en twips, donc ca donne un truc comme cà :
PictureBox : oPicture
oPicture.autoSize = true
oPicture.ScaleMode = vbPixels
Me.ScaleMode = vbPixels
oPicture.LoadPicture("le nom de ton fichier")
StretchBlt Me.hdc, 0, 0, Me.ScaleWidth,
Me.ScaleHeight, oPicture.hdc, 0, 0, oPicture.ScaleWidth, oPicture.ScaleHeight, SRCCOPY
Vous n’avez pas trouvé la réponse que vous recherchez ?
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 28 juin 2006 à 11:43
Heuuuu, ça marche pas :( ya pas mal d'erreur sur ton code
Voilà ce que j'ai tenté à partir de ton code
J'ai mis une pcitureBox dans sur la MDIForm, j'ai déclaré les API dans un module
Dim MeHdc As Long
MeHdc = GetDC(Me.hwnd)
Picture1.AutoSize = True
Picture1.ScaleMode = vbPixels
' Me.ScaleMode = vbPixels NE MARCHE PAS ScaleMode n'existe pas sur MDIForm
Me.Picture = LoadPicture(App.Path & "\FondSE1.jpg")
StretchBlt MeHdc, 0, 0, Me.ScaleWidth, Me.ScaleHeight, Picture1.hDC, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, &HCC0020
Et ça ne fait que me récupérer l'image et la mettre dans la picturebox
Le problème, c que si je mets une picturebox dans le MDIForm ça me décale tout ce qui s'affiche en dessous de la picturebox, arf, faudrait que je m'en débarasse avant l'affichage et après avoir modifier la taille.
Mai_s là, je sèche, ça fait 3h que je suis dessus à chercher de l'aie un peu partout, sans succès, ça devrait être assez utiliser comme truc pourtant... *-)
TBBUIM