Image de fond centrée sur une mdiform

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"

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.