Affichage d'une MDI fille sur PictureBox

cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012 - 25 nov. 2006 à 19:37
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 1 déc. 2006 à 09:21
Salut à tous. Comme la plupart le savent, mettre une image sur une MDI n'est pas forcement facile à réaliser. Pour mon cas, je me suis fait une pictureBox avec une image à l'intérieur... Mais le soucis, c'est que quand j'appelle une form MDI fille, elle apparait pas, surement parce qu'elle est cachée par la pictureBox...

Comment faire pour que cela ne se produise pas ?
Merci d'avance.

Kcin

18 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
25 nov. 2006 à 19:49
Tu peux être plus précis ?
Une Midi Form avec ou sans Form Mdichild ?
Sur ta MDI :
1)tu peux toujours utiliser sa propriété Picture pour son image de fond
2) regarde ce que tu as écrit :

"me suis fait une pictureBox avec une image à l'intérieur... Mais le soucis, c'est que quand j'appelle une form MDI fille, elle apparait pas, surement parce qu'elle est cachée par la pictureBox"
Qu'est-ce qui n'apparait pas ? la MDI ? la PictureBox, l'Image (et laquelle) ?

Bref... sois beaucoup plus précis, s'il te plait, sur ce que tu as et sur ce que tu cherches à avoir.
0
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
25 nov. 2006 à 19:58
Je voulais mettre sur une MDI Mère ( la principale ), une image de fond, mais lorsque l'on agrandit au max l'image gardait ses dimensions d'origine et donc laissait un trou. Bref. Après plusieurs heures de recherche, j'ai lu que l'on pouvait jouer sur les dimensions de l'image si on l'a mettait dans une pictureBox.

Jusque là tout fonctionne même l'agrandissement de la MDI mère avec la modification de l'image. Mais maintenant le problème qui se pose c'est quand j'appelle une MDI fille, elle reste cacher par la picturebox. Alors comment faire pour que la MDI Fille passe dessus la pictureBox ?

Kcin
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
25 nov. 2006 à 20:35
Je ne comprends décidément pas, à l'aide des seules explications que tu donnes là, où est un problème que je m'efforce en vain de provoquer sur ma machone ! (tout marche ici)....

De toutes façons, je ne comprends pas pourquoi tu fais toute cette gymnastique au lieu de dedimensionner (PaintPicture) l'image de fond de ta MDI ....ce qui est largement réalisable ......(n'oublie pas d'utiliser la propriété AutoRedraw de ta MDI, bien évidemment, ainsi que la méthode Cls
0
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
25 nov. 2006 à 21:31
Pour aller plus vite tu aurais le code de ce que tu me parles ? Sinon je peux te filer le mien comme ca tu pourras voir de tes propres yeux ce que j'ai fait.

Kcin
0

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

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
25 nov. 2006 à 21:41
Je n'ai pas exactement le code dont je parle ! J'ai mieux : une démonstration complète de redimensionnement (MDI ou pas) de l'image de fond.

Mais mon caractère est tel (vieux grincheux exigeant) que je souhaite (et les autres avec moi) voir ton travail d'abord...
Ne nous envoie pas tout ! Uniquement la partie qui concerne ton problème (au besoin, quand même : également, le cas échéant, la partie de code qui interfèrerait sur l'affichage de ta MDI  et se trouverait dans la Form Fille
0
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
25 nov. 2006 à 23:21
Pour le moment je prefere t'envoyé directement la source... Quand elle sera fini, je la mettrais  :D



Kcin
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 nov. 2006 à 08:59
Bonjour Kcin,

J'ai bien reçu ta source par un MP qui restera sans réponse...

Alors, s'il te plait :

1) relis ce que j'ai écrit plus haut à propos du seul code intéressant ton problème. Ton zip fait déjà à lui seul plus de 2 Mo et contient 36 objets !...
Tu ne crois pas que c'est un peu fort du bonnet juste pour traiter une partie concernant un affichage ?
2) Le principe de ce forum est que les sujets techniques ne peuvent être traités qu'au vu et au su de tous, pour profiter à tous (donc pas par MP)
3) je n'ai pas l'intention d'analyser tout ton projet pour isoler l'endroit qui pose problème

Alors, s'il te plait :

Veux-tu bien créer  un tout petit projet composé d'une Forme Fille et d'une MDIForm et des éléments et du code concernant l'affichage. Bresf un minuscule projet générant ton seul problème d'affichage et mettre ici :
- le code de la Form Fille
- le code de la MDIForm
- un bref desciptif des controles posés sur l'une et sur l'autre ainsi que de leurs propriétés principlaes.

Il te faudra sans aucun doute moins de temps pour l'écrire que celui qui a été nécessaire pour télécharcher ton zip puis d'éditer tour à tour ses objets pour voir (compte-tenu des noms non révêlateurs utilisés) où est la MDI et où sont les filles ...

A bientôt, donc, mais ICI
0
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
26 nov. 2006 à 12:23
Bon voilà j'ai fais, comme tu me l'a dis, un mini-projet que vous pourrez prendre ici : http://kcin.ath.cx/FTP/FFXI.zip, avec seulement les MDI mère et fille.

- La MDI mère contient une pictureBox accompagnée d'une image.
- La pictureBox a les propriétés autoredraw et autosize en true. Et il y a un code qui modifie le height de celle-ci en cas ou la MDI mère serait redimensionner.
- Quant à l'image, elle a la propriété Stretch à true.

Code MDI Mère :

Option Explicit
Private Sub MDIForm_Resize()

    Dim HeightPict As Integer
    Dim WidthPict As Integer

    Dim HeightImage As Integer
    Dim WidthImage As Integer
   
    'Redimensionne la Picture1 à la taille de la MDI mère
    'Permet de laisser l'image centrer dans la picture box
   
    Picture1.Height = MainFrame.Height
   
    WidthPict = Picture1.Width / 2
    HeightPict = Picture1.Height / 2
   
    WidthImage = Image1.Width / 2
    HeightImage = Image1.Height / 2
   
    Image1.Left = WidthPict - WidthImage
    Image1.Top = HeightPict - HeightImage * 1.5

End Sub
Private Sub Sub_Connecter_Click()
    Connexion.Show
End Sub
Private Sub Sub_Quitter_Click()
    Unload Me
End Sub


- La MDI fille a plein de contrôles comme boutons et j'en passe, car le problème se situe plus avec la MDI mère.

-J'ai donc réussi à garder mon image centrer lorsque l'utilisateur redimensionne la MDI mère, mais lorsque que l'on veut ouvrir la MDI fille, elle n'apparaît pas ou plutot reste cacher derriere la pictureBox.

Code MDI fille :
Private Sub CmdConnexionValider_Click()

Dim pMyErrorMsg As Long, myErrorMsg As String

pMySQL = mysql_init(0)

If TextConnexion1 <> "" And TextConnexion2 <> "" Then

    If mysql_real_connect(pMySQL, "", TextConnexion1, TextConnexion2, "test", 3306, "", 0) = 0 Then
   
        'Récupère le message d'erreur MySQL et l'affiche dans une msgbox
   
        pMyErrorMsg = mysql_error(pMySQL)
        myErrorMsg = CopieChaine(pMyErrorMsg)
        MsgBox myErrorMsg, vbCritical, "Connexion"
   
    Else
   
        MsgBox "Connexion établie avec succès.", vbInformation, "Connexion"
   
        MainFrame.Sub_Connecter.Enabled = False
        MainFrame.Sub_Connecter.Visible = False
   
        MainFrame.Sub_Deconnecter.Visible = True
        MainFrame.Sub_Deconnecter.Enabled = True
       
        MainFrame.Menu_Inventaire.Enabled = True
        MainFrame.Menu_Equipement.Enabled = True
       
        Unload Connexion
   
    End If

Else

    MsgBox "Vous avez oublié de remplir un champs !!"

End If
   
End Sub
Private Sub CmdConnexionAnnuler_Click()
    Unload Connexion 
End Sub
Private Sub Form_Load()

    Dim HeightPict As Integer
    Dim WidthPict As Integer

    Dim HeightImage As Integer
    Dim WidthImage As Integer

    WidthPict = MainFrame.Width / 2
    HeightPict = MainFrame.Height / 2
   
    WidthImage = Connexion.Width / 2
    HeightImage = Connexion.Height / 2
   
    Connexion.Left = WidthPict - WidthImage
    Connexion.Top = HeightPict - HeightImage * 1.5

End Sub

Donc j'aimerais savoir comment faire pour que ma MDI fille apparaisse devant la pictureBox Merci

Kcin
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 nov. 2006 à 15:17
Oupaaaah ...!
Que non !

1)  tu as inséré un contrôle image (et celà n'a rien à voir avec une image de fond, qui serait la propriété picture d'une Form ou d'une MDiForm)
2) tu as le choix entre :
  a) insérer une véiriable image de fond sur ta Mdi et
      -  la traiter par PaintPicture pour les redimentionnements
      - et traiter la Form Fille en transparence (j'ai donné il y a peu de temps un code pour y parvenir)
  b) mettre ton image de fond sur la form Fille et traiter le reste de la Form Fille dans un cadre transparent (j'ai également donné il y a peu un code pour y parvenir) et traiter également le redimensionnement de l'image de fond par paintpicture

Ne pas confondre image de fond avec un contrôle image
0
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
26 nov. 2006 à 16:35
Ok, je vais voir ca de près alors ^^
Merci

Kcin
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 nov. 2006 à 17:51
Si tu n'y parviens pas avec PaintPicture : fais signe et je ferai... mais pas avant que tu n'aies toi-même fait le maximum
Si tu appelles au secours, montre ce que tu as tenté.
Un conseil : avant même de parler de Mdi, fais tes essai avec une form tout ce qui a de plus normal.
En regardant ton exemple, je vois que tu te contentes de mettre ton dessin de fond au centre de la Form, sans le redimensionner lui-même, ce qui est encore plus simple.
Avec PaintPicture et la propriété picture de ta Form, tu dois y parvenir.
A bientôt, donc...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
27 nov. 2006 à 21:39
Alors Kcin ...

Tu as abandonné ?

C'est dommage....
De mon côté, c'est déjà résolu et sans Apis

(C'est fou ce que les gens demandent beaucoup et abandonnent vite !...)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 nov. 2006 à 11:21
Bon...
j'ai fini par lettre la solution ici :
http://www.vbfrance.com/codes/IMAGE-FOND-CENTREE-SUR-MDIFORM_40498.aspx
0
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
28 nov. 2006 à 11:47
Non j'ai pa abandonné t'inquiete... j'ai juste pas trop le temps de dev... C un prog perso donc il y a pas le feu ^^. Mais comme tu as dit avant, je dois d'abord chercher seul et apres on comparera nos résultat, même si les tiens sont à 100 % ok ^^

D'ailleurs j'ai un peu de temps je vais m'y remettre un moment...

Kcin
0
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
28 nov. 2006 à 12:43
Bon voila ce que j'ai essayé de faire avec une form simple :

Private Sub Form_Resize()

Dim HeightForm As Integer
Dim WidthForm As Integer
Dim HeightImage As Integer
Dim WidthImage As Integer

HeightForm = Me.Height
WidthForm = Me.Width
HeightImage = Me.Picture.Height
WidthImage = Me.Picture.Width

Me.PaintPicture Picture, (WidthForm / 2 - WidthImage / 2), (HeightForm / 2 - HeightImage / 2), WidthImage, HeightImage, 0, 0, WidthImage, HeightImage
End Sub

Et voici ma logique : Vu qu'avec vb pour positionner un objet, il faut connaître le left et le top, en divisant par 2 la largeur de ma form en y enlevant la largeur de la picture ( non le controle, là c la propriété ) divisé par 2 également, on devrait obtenir le left. Faire pareil pour le top avec avec la hauteur. Je peux avec ca deplacer la picture. Mais avec paintpicture ( si je me suis pas trompé ) la picture bouge pas. Et même des fois, j'ai de gros traînés pas belle ><

Kcin
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
28 nov. 2006 à 17:57
Regarde le commentaire qui accompagne ce que j'ai déposé :
Une MdiForm n'accepte pas la propriété PaintPicture.


Evite au passage des "WidthForm / 2 - WidthImage / 2" que tu peux plus rentablement exprimer par :
"(WidthForm - WidthImage)/2" et avoir ainsi une soustraction et une division au lieu d'une soustraction et de 2 divisions (mais celà b'a rien à voir avec ton problème)
0
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
29 nov. 2006 à 21:32
le code que j'ai posé correspond à celui d'une form normale, pas MDI donc paintpicture devrait fonctionne... mais quand je recup les valeurs de la largeur et hauteur du picture, ca me donne la taille de la form ( ce qui est normal, voila pourquoi ca bouge pas. )

Kcin
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 déc. 2006 à 09:21
Bon....
La source déposée va être légèrement modifiée pour qu'elle tourne sans problèmes avec une MDIForm quelle que soit la machine.
Une pierre utile a été très astucieusement ajoutée par Moustachu.

Attends donc cet après-midi.
0
Rejoignez-nous