begin process at 2010 03 21 02:05:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > IMAGE DE FOND CENTRÉE SUR UNE MDIFORM

IMAGE DE FOND CENTRÉE SUR UNE MDIFORM


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :mdiform, picture Niveau :Débutant Date de création :28/11/2006 Date de mise à jour :01/12/2006 11:47:40 Vu / téléchargé :3 584 / 840

Auteur : jmfmarques

Ecrire un message privé
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Je dépose cette source à la suite d'un problème récemment soulevé par un Forumeur sous VB.

Le titre expose le résultat à obtenir : appliquer à une MDIForm une image de fond, pouvoir la centrer et garder ce centrage lors de redimensionnements éventuels de la MDI (fenêtre aggrandie, etc...)

La chose paraissait simple. Elle ne l'était pas car :
Autant l'on peut définir une image de fond dans la fenêtre des propriétés d'une MDIForm (propriété Picture), autant il est impossible d'appliquer à une MDIForm la méthode PaintPicture (dynamiquement, donc). Résultat : impossibilité de "positionner" cette image de fond.

La solution relève beaucoup plus d'une démarche de la pensée (astuce, donc) que d'une bonne connaissance de VB.
Bien qu'il soit tout à fait possible de parvenir à un résultat similaire en utilisant des fonctions de l'API de Windows, j'ai tenu à "ne faire" qu'avec ce qu'offre VB (du simple, donc) et, ainsi, pouvoir inscrire cette proposition de source dans la catégotie "débutant".

Le truc utilisé :
- une picturebox invisible sur la MDIForm et contenant un contrôle image également invisible et dont la propriété Strech = false.
- à chaque événement Resize : on adapte la hauteur de la pictureBox à celle de la MDIForm (inutile de s'occuper de sa largeur qui, pour une PictureBox placée sur une MDIForm, occupe automatiquement toute la largeur disponibe.)
- appliquer alors la méthode PaintPicture à la PictureBox, à partir de l'image qui, elle, est toujours de même taille ===>> obtention donc d'une pictureBox de taille identique à celle de la MDIForm et avec l'image représentée en son centre.

Que reste-t-il à faire ? Rien d'autre que de dire que la propriété picture de la MDIForm est l'image de la PictureBox, pardi...

L'oeuf de Christophe Colomb, quoi...

NOTA : La lecture des commentaires ci-après ayant mis en évidence que les réactions pouvaient être différentes d'une machine à l'autre, il a fallu rechercher une solution pour pallier cette difficultés.

Cette solution a été trouvée par notre ami MOUSTACHU qui a astucieusement pensé à ajouter l'utilisation d'une variable booléenne et à jouer avec la propriété visible....

Je remercie pour son importante contribution Moustachu. La pierre qu'il a ajoutée à cet édifice justifie à mon sens (bien qu'il veuille prétendre que non) que son nom soit totalement associé au mien dans la signature de la présente source dont le zip est donc modifié en conséquence. MERCI ENCORE A MOUSTACHU.




PS : si d'aucuns souhaitaient savoir également comment on pourrait le faire autrement (avec APIs), je le ferais mais je préfère cette méthode qui, elle, a le mérite de rester au niveau "débutant"





 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

28 novembre 2006 09:50:30 :
Je me suis trompé de zip. Le bon est maintenant là (si quelqu'un pouvait supprimer le 1er, ce serait bien). Marci
28 novembre 2006 11:52:50 :
Correction de 2 petites fautes de frappe.
01 décembre 2006 11:47:40 :
Voir les commentaires : Des réactions étaient différentes selon les machines. Le Zip a donc été corrigé grâce à une astuce complémentaire trouvée Par Moustachu, dont je souhaite qu'il soit co-signataire de la présente source

 Sources du même auteur

Source avec Zip SAISIE ASSISTÉE DE DATES
Source avec Zip POSITIONNER UNE MSGBOX
Source avec Zip SAISIES CONTROLÉES DIVERSES (ALPHABÉTIQUES ET NUMÉRIQUES)
Source avec Zip MODIFICATION D'UNE COULEUR D'UNE IMAGE
Source avec Zip CONTRÔLES PERSONNALISÉS - DIVERS DÉGRADÉS PARAMÉTRABLES - TO...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) COMPARAISON D'IMAGE par mafieulemouton
Source avec Zip Source avec une capture Source .NET (Dotnet) RECADRER_IMAGE par Le Pivert
Source avec Zip Source avec une capture Source .NET (Dotnet) EDITION DE CARACTÈRES MATRICIELS (POUR BITMAP, CF CODE 128) par Blodox
Source avec Zip Source avec une capture CRÉATION D'UN MASQUE GRAPHIQUE POUR MODIFIER LA COULEUR D'UN... par Dudule_73
Source avec Zip Source avec une capture Source .NET (Dotnet) GÉNÉRATEUR DE CODE 128 (CODE-BARRE) par Blodox

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture RÉCUPÉRATION DES IMAGES SYSTÈME DEPUIS LEUR EXTENSION OU LEU... par PCPT
Source .NET (Dotnet) DESSINER AVEC LA METHODE "DRAWIMAGE" par insosama
Source avec Zip LOUPE PICTURE BOX par rboubaker
Source avec Zip Source avec une capture DÉPLACER ET DIMENSIONNER UNE SÉLECTION DANS UNE PICTUREBOX par jalbibich
Source avec Zip Source avec une capture PROGRESS BAR COULEURS DIFFERENTES par PROTEUS91

Commentaires et avis

Commentaire de chaibat05 le 28/11/2006 23:38:24

Salut,
Trop beau pour être vrai...!
Mais que veux tu ...la réalité s en "fiche" toujours des éspérances...
Résultat :
Image tronquée ou en double (voir les deux à la fois)quand la Mdi
est Maximizée...
Pire encore quand Form2 est déchargée. Avec elle elle au moins on
pourrait sauvé la situation en balayant la surface de la MDI.
Encore faut il la tenir par le bout du nez et la balader
dans tout les sens

S' il y' a un démenti, je ne dis pas,
mais moi je crois ce que je vois.

Connaossant ton niveau, il y' a sûrement une explication à ça.
C' est pourquoi je n' ai pas mis de note...
Poour l' instant.

A+

chaibat

Commentaire de jmfmarques le 29/11/2006 09:07:01

en....
Je viens de faire une bonne centaine de "maximisations" puis de retours à "la normale" sans parvenir au phénomène que tu dis avoir.
Et c'est quoi Form2 ? D'où sort-elle ? on dirait que tu as "arrangé à une sauce différente" (et je ne sais laquelle) et que c'est cette sauce (que j'ignore) qui ne va pas !
Si c'est celà, une "adaptation" que tu as tentée sans succès, il convient d'ouvrir une discussion sur le forum normal de VB et d'y joindre un exemple simple reproduisant ton problème. Je verrai alors où est situé ce problème.

Commentaire de jmfmarques le 29/11/2006 10:36:51

Je lis et relis ton commentaire :
Une chose appelle mon attention :

"Image tronquée ou en double (voir les deux à la fois)quand la Mdi
est Maximizée..."

N'aurais-tu pas (ceci expliquerait celà) oublié de remettre systématiquement à vide la PictureBox ?
Cette ligne de code est importante et ne doit bien évidemment pas être supprimée : !!!

" Picture1.Picture = Nothing "    <<<<<<==========

Si tu la supprimes, tu as bien évidemment des trucs bizarres ..... puisque la picture se dessine alors sur elle-même..... !!!

Commentaire de chaibat05 le 29/11/2006 11:49:33

j' ai pas touché à ton code.
Pour Form2, il s' agit bien de ta Child ()
c' était une erreur de frappe comme il en arrive toujours...

Retour vers le passé, question de changer le cours de l' histoire
....
Salut,
Trop beau pour être vrai...!
Mais que veux tu ...la réalité s en "fiche" toujours des éspérances...
Résultat :
Image tronquée ou en double (voir les deux à la fois)quand la Mdi
est Maximizée...
Pire encore quand la fenêtre fille est déchargée. Avec elle elle au moins on
pourrait sauvé la situation en balayant la surface de la MDI.
Encore faut il la tenir par le bout du nez et la balader
dans tout les sens

S' il y' a un démenti, je ne dis pas,
mais moi je crois ce que je vois.

Connaissant ton niveau, il y' a sûrement une explication à ça.
C' est pourquoi je n' ai pas mis de note...
Pour l' instant.

A+

chaibat
.....

Et c' est de mauvaise fois que de croire que j' ai biduoillé
ta source juste pour t' emmerder
J' ai passé l' âge pour ça; en plus je n' ai pas le temps


PS: je ne répond pas aux messages personnels

Commentaire de jmfmarques le 29/11/2006 12:13:07

Bon....
Si quelqu'un d'autre pouvait tester et nous dire, ce serait bien...
Je n'ai pas ce problème, malgré tous mes tests...

Commentaire de DJMCG le 29/11/2006 19:05:29

Bon, j'ai une réunion, mais je fait le test au pire demain matin.
Je vous tiens au courant.

Commentaire de Le cancre le 29/11/2006 20:26:43

rien de méchant...c'est juste à cause des 2 derniers Doevents dans la procédure Private Sub MDIForm_Resize()
sinon le code marche tres bien.....++

Commentaire de moustachu le 30/11/2006 08:59:23

Bonjour,

Il y a effectivement pour moi des problèmes lors du redimensionnement de la fenêtre. L'image de fond ne se rafraichit pas. En revanche, en minimisant, puis maximisant la fenêtre, c'est Ok en supprimant les DoEvents. En déplaçant la fenêtre "child", l'image se redessine.

>>CHAIBAT05, Je ne crois pas que l'auteur de la source t'ai accusé d'avoir bidouillé sa source pour l'emm*rder et je ne vois pas trace de mauvaise fois!

++
Moustachu

Commentaire de jmfmarques le 30/11/2006 09:26:09

Bon,
Il semble donc que les réactions ne soient pas les mêmes entre une machine et l'autre.
Peut-être des problèmes de rapidité de rafraichissement différentes ?
J'attends encore un peu et, si le problème est présent sur d'autres machines, utiliserai des APis pour que ça aille plus vite.
Merci à ceux qui ont bien voulu tester et me renseigner.

Commentaire de moustachu le 30/11/2006 09:46:46

Avec ça :
Private Sub MDIForm_Resize()


        Image1.Visible = True
        Picture1.Visible = True
        Me.Picture = LoadPicture
        Picture1.Height = Me.Height
        
        Picture1.Picture = LoadPicture
        Picture1.PaintPicture Image1.Picture, (Me.Width / 2 - Image1.Width / 2), (Me.Height - (Image1.Height)) / 2, Image1.Width, Image1.Height, 0, 0, Image1.Width, Image1.Height
        Picture1.Picture = Picture1.Image
        
        Me.Picture = Picture1.Picture
        Image1.Visible = False
        Picture1.Visible = False

End Sub

Ca marche.

++
Moustachu

Commentaire de DJMCG le 30/11/2006 10:45:05

Bonjour,
Désolé, je peux pas essayé.
C'est du vb6 et j'ai 2005 express.
J'avais pas capté.

Commentaire de jmfmarques le 30/11/2006 11:54:55

Bonjour Moustachu et merci de ton intérêt.

Malheureusement, avec ton code, c'est cette fois-ci sur ma machine que çà ne marche pas du tout, avec un message d'errur carrément en entrée si l'image de fond n'est pas installée "en dur" (fenêtre des propriétés) dans image1. Explication : l'activate provoque un 1er rezize avant le chargeùent de l'image et on a donc une image vide et donc invalide pour le paintPicture.

Si maintenant, je définis en dur image1, l'image apparait bien au fond une fraction de seconde, mais disparait aussitôt sans que je puisse en déterminer la raison ...

Explication possible : le resize est conduit de a à z et donc toujours en cours depuis a jusqu'à z, passant donc par a (se déclenchant), puis par b (se déclenchant également) etc... et provoquant donc une série d'image1 visible, invisible, visible à nouveau etx... et le tout s'arrête dans un état qui va dépendre des entrées/sorties, sans que l'on puisse réellement contrôler la dernière... ! dur dur...

D'une machine à l'autre, d'un état de la machine à l'autre, dans de telles conditions, les surprises sont là : avec mon code (on l'a vu) et avec ta proposition (on le voit aussi).

Conclusion : il va me falloir trouver un truc complémentaire. J'ai déjà une idée que je testerai sur ma machine d'abord. Accepterais-tu (puisque nous avons la chance d'avoir en toi un possesseur de machine où les reactions sont différentes de la mienne) de tester, avant que je ne la propose, une nouvelle modification ? Si oui, nous pourrions le faire par MP pour ne pas trop alourdir iici.
Fais-moi savoir si tu en es d'accord et je t'enverrai alors par MP la modif à tester.
Je te remercie beaucoup à nouveau, ami Moustachu.

Commentaire de jmfmarques le 01/12/2006 11:53:02

Voilà donc...

Plus aucun problème de différences entre une machine et l'autre ne devrait maintenant être présent.

Notre ami Moustachu, dorénavant co-signataire de cette source, a trouvé l'astuce complémentaire (voir la présentation modifiée) qui a su résoudre ce problème.

Je salue l'esprit d'équipe de Moustachu et le remercie vivement, tant pour moi qu'au nom de tous.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Centrer une picture dans une MDIform ? [ par caroline ] Bonjour à tous !Dans une MDIform, on peut charger une image de fond dans la feuille grâce à la propriété "Picture", c'est très bien, mais, cette image Impression multiple en vb6 [ par Fabrice88 ] slt,j'ai fais un prog pour imprimmer les jaquette cd.voici le code pour l'impression :CMD.CancelError = TrueCMD.Flags = &H1& 'Active le bouton radio S pb simple, ms je débute : modifier prop "picture" avec du code [ par Kssoule ] Je voudrais savoir comment faire pour changer la propriété "picture" d'une fenêtre en utilisant une adresse ou par un autre moyen.Par exemple j'ai ess MDIform, Noresize [ par VicoLaChips2 ] Je voudrais savoir si quelqu'un sait comment griser le carre qui permet d'agrandir la fenêtre(MDI_form) de mon prg!!, de façon à ce qu'on ne puisse pa Utilisation de l'objet Picture [ par Kholera ] J'ai vu, dans le msdn, l'utilisation d'un objet picture.Le hic c'est que quand je le déclare comme dans la source : Dim x as PictureJ'ai une erreur " Imprimer une picture avec des contrôles [ par CDTThomas ] Salut à tous !Alors voici mon problème je dois arriver à imprimer une picturebox sur laquelle j'ai des contrôles (textbox, checkbox...). Le problème c insertion d'une propriete Picture ds un Controle utilisateur [ par ced74 ] Je suis entrain de creer un controle utilisateur. C'est un scrollbar personnalisable.Mais il faut que je mette des propriete PICTUREEt j'y arriv Ajout d'une propriete picture a controle utilisateur [ par ced74 ] Je suis entrain de creer un controle utilisateur. C'est un scrollbar personnalisable.Mais il faut que je mette des propriete PICTUREEt j'y arriv Help!!! Probleme avec les Picture Box [ par Master ] comment rendre transparent le contour d'une picture box. Si par exemple , la picture box contient un cercle , le contour du cercle ne se voit pas.Est Comment déplacer un dessin dans un picture box ? [ par Pixel ] Salut tlmDans un picture box, je dessine avec la souris des traits, des ronds, des rectangles. Jusque là c'est bon !Ce que je voudrais faire c'est ens


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales