Picture d'une MDI

Résolu
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 - 28 juin 2006 à 08:46
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Derniè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...

Merci pour votre aide.
TBBUIM

5 réponses

tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
12 juil. 2006 à 16:00
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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.
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
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)

StretchBlt Me.Picture.Handle, 0, 0, Me.Picture.Width, Me.Picture.Height, Me.Picture.Handle, 0, 0, Screen.Width, Screen.Height, SRCCOPY

TBBUIM
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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
0

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

Posez votre question
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
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
0
Rejoignez-nous