Date de publication : 24/04/08 , Date de mise à jour : 24/04/08
Par
Thierry GASPERMENT (arkham46.developpez.com/)
Ce tutoriel explique les méthodes pour créer des formulaires Access aux formes personnalisées.
La librairie Gdi+ ainsi que le module VBA clGdiPlus sont requis.
I. Introduction
II. Prérequis Gdi+
III. Initialisation des formulaires
IV. Formulaire personnalisé dont la forme est délimitée par des contrôles
IV-A. Création des contrôles
IV-B. Bouton de fermeture du formulaire
IV-C. Limitation de l'affichage au contrôle FrameVisible
IV-C. Déplacer le formulaire
IV-D. Faire un trou dans le formulaire
V. Formulaire personnalisé dont la forme est délimitée par une image
IV-A. Préparation de l'image
IV-B. Création des contrôles
IV-C. Bouton de fermeture du formulaire
IV-D. Limitation de l'affichage à l'intérieur de l'image
IV-E. Déplacer le formulaire
V. Conclusion
VI. Téléchargements
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
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
ClGdiPlus.
Attention : le nom sous lequel vous sauvegardez le module est important.
Ce module de classe VBA utilise la librairie gdiplus.dll de Microsoft.
Si vous utilisez une version de Windows autre que XP,
télécharger la librairie et placez la dans le même répertoire que le fichier Access.
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 |
Option Compare Database
Option Explicit
Private clGdip As clGdiPlus
Private Sub Form_Load()
Set clGdip = New clGdiPlus
End Sub
Private Sub Form_Close()
If Not clGdip is Nothing Then Set clGdip = Nothing
End Sub
|
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
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 |
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 |
clGdip.CreateRegionRect "regionvisible", _
clGdip.PointsToPixelsX(Me.FrameVisible.Left) - 1, _
clGdip.PointsToPixelsY(Me.FrameVisible.Top) - 1, _
clGdip.PointsToPixelsX(Me.FrameVisible.Left + Me.FrameVisible.Width) - 1, _
clGdip.PointsToPixelsY(Me.FrameVisible.Top + Me.FrameVisible.Height) - 1
|
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 |
clGdip.SetFormRegion Me,"regionvisible"
clGdip.DeleteRegion "regionvisible"
|
Lorsqu'on affiche alors le formulaire, on ne voit que l'intérieur du contrôle FrameVisible.
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 |
Private Sub Détail_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
clGdip.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 |
Private Sub Form_Load()
Set clGdip = New ClGdiPLus
clGdip.CreateRegionRect "regionvisible", _
clGdip.PointsToPixelsX(Me.FrameVisible.Left) - 1, _
clGdip.PointsToPixelsY(Me.FrameVisible.Top) - 1, _
clGdip.PointsToPixelsX(Me.FrameVisible.Left + Me.FrameVisible.Width) - 1, _
clGdip.PointsToPixelsY(Me.FrameVisible.Top + Me.FrameVisible.Height) - 1
clGdip.CreateRegionRect "regionempty", _
clGdip.PointsToPixelsX(Me.FrameEmpty.Left), _
clGdip.PointsToPixelsY(Me.FrameEmpty.Top), _
clGdip.PointsToPixelsX(Me.FrameEmpty.Left + Me.FrameEmpty.Width) - 2, _
clGdip.PointsToPixelsY(Me.FrameEmpty.Top + Me.FrameEmpty.Height) - 2
clGdip.RegionCombine "regionvisible", "regionempty", CombineModeExclude
clGdip.SetFormRegion Me, "regionvisible"
clGdip.DeleteRegion "regionvisible"
clGdip.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.
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.
IV-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.
IV-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
IV-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 |
Private Sub BtnClose_Click()
DoCmd.Close acForm, Me.Name
End Sub
|
IV-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 |
clGdip.LoadBitmapFromControl Me.ImgBack
clGdip.CreateRegionFromColor "region", clGdip.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.
Les valeurs numériques sont des corrections en pixels.
Les corrections nécessaires à un affichage correct peuvent différer en fonction de la taille et de la position du contrôle et de l'image intégrée.
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 |
clGdip.SetFormRegion Me, "region", Me.ImgBack, , -2, -3, , 1.5
clGdip.DeleteRegion "region"
|
Lorsqu'on affiche alors le formulaire, on ne voit que l'intérieur de la bulle.
IV-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 |
Private Sub ImgBack_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
clGdip.DragForm Me
End Sub
|
V. Conclusion
Merci à l'équipe Office de developpez.com pour ses relectures, commentaires et encouragements!
VI. Téléchargements


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 oeuvre intellectuelle protégée par les droits d'auteurs. 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'à 3 ans de prison et jusqu'à 300 000 E
de dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.
Cette page est déposée à la
SACD.