Personnalisation de la forme d'un formulaire

Image non disponible

Ce tutoriel explique les méthodes pour créer des formulaires Access aux formes personnalisées.
Le module VBA clGdi32 est requis.

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Ce tutoriel a été rédigé avec Access 2003.


Nous allons au cours de ce tutoriel :
  - limiter l'affichage du formulaire à l'intérieur d'un contrôle
  - faire un trou dans un formulaire
  - créer un formulaire en forme de bulle

Image non disponible
Image non disponible


Consultez la documentation des fonctions et des propriétés

Consultez le tutoriel d'initiation

II. Prérequis Gdi

Téléchargez la classe au format texte(HTTP)
Créez un nouveau module de classe.
Collez-y le contenu du fichier texte.
Sauvegardez le module avec le nom ClGdi32.
Attention : le nom sous lequel vous sauvegardez le module est important.

Ce module de classe VBA utilise la librairie gdi32.dll de Microsoft, intégrée à Windows.

III. Initialisation des formulaires

Cette première étape est commune et sera à répéter pour chaque exemple.

Créez un nouveau formulaire et insérez-y le code suivant.

Initialisation du formulaire
Sélectionnez

Option Compare Database
Option Explicit
Private clGdi As clGdi32 ' Classe image

'---------------------------------------------------------------------------------------
' Sur chargement du formulaire
'---------------------------------------------------------------------------------------
Private Sub Form_Load()
' Initialisation de la classe de dessin
Set clGdi = New clGdi32
End Sub
'---------------------------------------------------------------------------------------
' Sur fermeture du formulaire
'---------------------------------------------------------------------------------------
Private Sub Form_Close()
' Libération de la classe à la fermeture du formulaire
If Not clGdi is Nothing Then Set clGdi = Nothing
End Sub

Cette étape est expliquée en détail dans le tutoriel d'initiation.

IV. Formulaire personnalisé dont la forme est délimitée par des contrôles

Initialiser un nouveau formulaire comme décrit en section III - Initialisation des formulaires.

IV-A. Création des contrôles

Pour préparer le formulaire, créez :
- un rectangle nommé FrameVisible : ne sera visible que l'intérieur de ce rectangle
- un rectangle nommé FrameEmpty : il y aura un "trou" à la place de ce rectangle
- divers contrôles dont un bouton de commande nommé BtnClose

Image non disponible

IV-B. Bouton de fermeture du formulaire

Comme nous allons restreindre la zone d'affichage, la barre de titre du formulaire ne sera plus visible.
Il faut donc penser à ajouter un bouton de fermeture; c'est le bouton BtnClose.

Code de fermeture
Sélectionnez

'---------------------------------------------------------------------------------------
' Bouton de fermeture du formulaire
'---------------------------------------------------------------------------------------
Private Sub BtnClose_Click()
DoCmd.Close acForm, Me.Name
End Sub

IV-C. Limitation de l'affichage au contrôle FrameVisible

Pour restreindre l'affichage d'un formulaire, il faut créer une région puis l'affecter au formulaire.
Nous effectuons cette action au chargement du formulaire, dans l'événement "Sur chargement", à la suite de l'initialisation de la classe.
La région rectangulaire est créée à l'aide de la fonction CreateRegionRect.
Les fonctions PointsToPixelsX et PointsToPixelsY sont nécessaire pour convertir les coordonnées de Twips en Pixels.

Création de la région
Sélectionnez

' Création d'une région rectangulaire correspondant au contrôle FrameVisible
clGdi.CreateRegionRect "regionvisible", _
        clGdi.PointsToPixelsX(Me.FrameVisible.Left), _
        clGdi.PointsToPixelsY(Me.FrameVisible.Top), _
        clGdi.PointsToPixelsX(Me.FrameVisible.Left + Me.FrameVisible.Width), _
        clGdi.PointsToPixelsY(Me.FrameVisible.Top + Me.FrameVisible.Height)

La région est affectée au formulaire à l'aide de la fonction SetFormRegion.
On précise le formulaire (Me pour le formulaire dans lequel le code s'exécute) et le nom de la région précédemment créée.
On peut ensuite supprimer la région qui n'est plus utile.

Remarque : on ne précise pas de contrôle de référence (pCtrlRef) car la région n'a pas été créée sur une image mais directement avec des coordonnées prises sur le formulaire.

Affectation de la région au formulaire
Sélectionnez

' Affectation de la région au formulaire
    clGdip.SetFormRegion Me,"regionvisible"
' Supprime la région
    clGdip.DeleteRegion "regionvisible"

Lorsqu'on affiche alors le formulaire, on ne voit que l'intérieur du contrôle FrameVisible.

Image non disponible

IV-C. Déplacer le formulaire

Si vous essayer de déplacer le formulaire, vous êtes bien embêtés car la barre de titre a disparu.
Utilisez la fonction DragForm sur l'événement Souris Appuyée pour permettre le déplacement en cliquant sur le formulaire.

Déplacer le formulaire en cliquant sur la section détail
Sélectionnez

'---------------------------------------------------------------------------------------
' Souris appuyée sur section détail
'---------------------------------------------------------------------------------------
Private Sub Détail_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
clGdi.DragForm Me
End Sub

IV-D. Faire un trou dans le formulaire

Pour faire un trou à l'emplacement du contrôle FrameEmpty nous allons :
- créer une région correspondant à ce contrôle
- combiner la région avec la précédente
- Affecter la région résultant de la combinaison au formulaire

Faire un trou dans le formulaire
Sélectionnez

'---------------------------------------------------------------------------------------
' Sur chargement du formulaire
'---------------------------------------------------------------------------------------
Private Sub Form_Load()
' Initialisation de la classe de dessin
Set clGdi = New ClGdi32
' Création d'une région rectangulaire correspondant au contrôle FrameVisible
clGdi.CreateRegionRect "regionvisible", _
        clGdi.PointsToPixelsX(Me.FrameVisible.Left), _
        clGdi.PointsToPixelsY(Me.FrameVisible.Top), _
        clGdi.PointsToPixelsX(Me.FrameVisible.Left + Me.FrameVisible.Width), _
        clGdi.PointsToPixelsY(Me.FrameVisible.Top + Me.FrameVisible.Height)
' Création d'une région rectangulaire correspondant au contrôle FrameEmpty
clGdi.CreateRegionRect "regionempty", _
        clGdi.PointsToPixelsX(Me.FrameEmpty.Left), _
        clGdi.PointsToPixelsY(Me.FrameEmpty.Top), _
        clGdi.PointsToPixelsX(Me.FrameEmpty.Left + Me.FrameEmpty.Width), _
        clGdi.PointsToPixelsY(Me.FrameEmpty.Top + Me.FrameEmpty.Height)
' Exclu la region "regionempty" de la région "regionvisible"
clGdi.RegionCombine "regionvisible", "regionempty", CombineModeExclude
' Affectation de la région au formulaire
clGdi.SetFormRegion Me, "regionvisible"
' Suppression des régions
clGdi.DeleteRegion "regionvisible"
clGdi.DeleteRegion "regionempty"
End Sub

Lorsqu'on affiche alors le formulaire, on ne voit que l'intérieur du contrôle FrameVisible avec un trou à l'emplacement du contrôle FrameEmpty.

Image non disponible

V. Formulaire personnalisé dont la forme est délimitée par une image

Initialiser un nouveau formulaire comme décrit en section III - Initialisation des formulaires.

V-A. Préparation de l'image

Créez une image de fond, avec Paint par exemple.
Laissez le tour de l'image en blanc, cette couleur délimitera l'affichage.
Image non disponible

V-B. Création des contrôles

Pour préparer le formulaire, créez :
- une image nommée ImgBack qui contient l'image précédemment créée.
- une étiquette contenant un texte libre
- un bouton de commande nommé BtnClose

Image non disponible

V-C. Bouton de fermeture du formulaire

Comme nous allons restreindre la zone d'affichage, la barre de titre du formulaire ne sera plus visible.
Il faut donc penser à ajouter un bouton de fermeture; c'est le bouton BtnClose.

Code de fermeture
Sélectionnez

'---------------------------------------------------------------------------------------
' Bouton de fermeture du formulaire
'---------------------------------------------------------------------------------------
Private Sub BtnClose_Click()
DoCmd.Close acForm, Me.Name
End Sub

V-D. Limitation de l'affichage à l'intérieur de l'image

Pour restreindre l'affichage d'un formulaire, il faut créer une région puis l'affecter au formulaire.
Nous effectuons cette action au chargement du formulaire, dans l'événement "Sur chargement", à la suite de l'initialisation de la classe.

La première étape est le chargement de l'image intégrée au contrôle.
Nous utilisons la fonction LoadBitmapFromControl pour charger l'image du contrôle ImgBack.
La région est créée à l'aide de la fonction CreateRegionFromColor.
Cette fonction crée une région définie par la couleur des points de l'image.

On utilise la fonction GetPixel pour lire la couleur du point en haut à gauche (coordonnées 0,0).

Création de la région
Sélectionnez

' Chargement de l'image en mémoire à partir du contrôle
clGdi.LoadBitmapFromControl Me.ImgBack
' Créaton d'une région définie par les points dont la couleur est différente du point de coordonnées 0,0
clGdi.CreateRegionFromColor "region", clGdi.GetPixel(0, 0)

La région est affectée au formulaire à l'aide de la fonction SetFormRegion.
On précise le formulaire (Me pour le formulaire dans lequel le code s'exécute) et le nom de la région précédemment créée.

Des corrections pour un affichage correct peuvent être nécessaires en fonction de la taille et de la position du contrôle et de l'image intégrée.
Si besoin, utilisez les paramètres pCorrection*.

On peut ensuite supprimer la région qui n'est plus utile.

Remarque : on précise un contrôle de référence (pCtrlRef) car la région a été créée par rapport à l'image contenue dans le contrôle ImgBack.

Affectation de la région au formulaire
Sélectionnez

' Affectation de la région au formulaire
clGdi.SetFormRegion Me, "region", Me.ImgBack
' Supprime la région
clGdi.DeleteRegion "region"

Lorsqu'on affiche alors le formulaire, on ne voit que l'intérieur de la bulle.

Image non disponible

V-E. Déplacer le formulaire

Si vous essayer de déplacer le formulaire, vous êtes bien embêtés car la barre de titre a disparu.
Utilisez la fonction DragForm sur l'événement Souris Appuyée pour permettre le déplacement en cliquant sur le formulaire.

Déplacer le formulaire en cliquant sur le contrôle image
Sélectionnez

'---------------------------------------------------------------------------------------
' Souris appuyée sur l'image
'---------------------------------------------------------------------------------------
Private Sub ImgBack_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
clGdip.DragForm Me
End Sub

VI. Conclusion


Merci à l'équipe Office de developpez.com pour ses relectures, commentaires et encouragements!

VII. Téléchargements

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.