Cet article a pour but d’expliquer l’intégration et la gestion d’un bouton rond dans un formulaire Microsoft Access 2002.
Par défaut, dans Access, un bouton de commande ressemble à ça : ou ça :
.
Le choix se limite à un bouton carré ou rectangulaire avec une image ou du texte.De plus, la couleur du bouton n’est pas modifiable, on peut juste changer la couleur du texte.
Il y a 10 ans de cela, ces boutons étaient au top, maintenant on s’attend davantage à voir un bouton qui ressemble à ça :
Notre bouton rond va permettre de quitter l’application avec un message de confirmation :
If MsgBox("Quitter l’application ?", vbQuestion + vbOKCancel + vbDefaultButton1, "Confirmation de sortie") = vbOK Then
Application.Quit
End If
Intégration du bouton rond dans un formulaire :
Il nous faut 3 composants : un bouton de commande et 2 images.
On garde le bouton de commande carré que l’on nomme « btnQuit » et on affecte la valeur oui à la propriété Transparent (Me.BtnQuit.BackStyle = True).
Ce bouton transparent va nous permettre d’exécuter le code pour quitter l’application.
On nomme « btnQuitUp » le 1er composant image.
On affecte les propriétés suivantes :
Me.btnQuitUp.Picture = "C:\Fic_win\btnQuitUp.jpg"
Me.btnQuitUp.PictureType = 0
La propriété Picture permet de pointer sur l’image suivante :
La propriété PictureType permet d’incorporer et de stocker l’image dans l’objet.
On nomme « btnQuitDown » le 2ème composant image.
On affecte les propriétés suivantes :
Me.btnQuitDown.Picture = "C:\Fic_win\btnQuitDown.jpg"
Me.btnQuitDown.PictureType = 0
La propriété Picture permet de pointer sur l’image suivante :
La propriété PictureType permet d’incorporer et de stocker l’image dans l’objet.
Cette 2ème image va donner du relief et l’impression d’avoir cliqué sur le bouton.
Maintenant que l’on a nos 3 composants, il ne reste plus qu’a les superposer à l’endroit voulu sur le formulaire.
L’ordre d’empilage est le suivant : « btnQuitDown » en dessous, on place « btnQuitUp » au milieu et le bouton transparent « btnQuit » au dessus.
Au final, on doit voir uniquement « btnQuitUp » et accéder aux événements du bouton transparent « btnQuit » lorsque l’on clique sur le bouton rond.
Gestion du bouton rond :
Le but est d’afficher « btnQuitDown » lorsque l’on appuie sur le bouton via le clic gauche de la souris et d’afficher « btnQuitUp » lorsque l’on arrête d’appuyer sur le clic gauche.
Le fait de passer d’une image à l’autre va donner l’impression d’avoir cliqué sur un bouton.
Pour ce faire, on n’utilise pas l’événement « Sur clic » du bouton transparent « btnQuit », mais on utilise les 2 événements suivants :
« Sur souris appuyée » :
Private Sub btnQuit_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Call MANAGE_BUTTON_DOWN(Button, X, Y)
End Sub
Et
« Sur souris relâchée » :
Private Sub btnQuit_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If MANAGE_BUTTON_UP(Button, X, Y) Then
If MsgBox("Quitter l’application ?", vbQuestion + vbOKCancel + vbDefaultButton1, "Confirmation de sortie") = vbOK Then
Application.Quit
End If
End If
End Sub
L’événement « Sur souris appuyée » appelle la procédure suivante :
Public Sub MANAGE_BUTTON_DOWN(Button As Integer, X As Single, Y As Single)
Dim strButtonName As String
Dim ctrlImg As Control
Dim X0, Y0 As Integer
strButtonName = Screen.ActiveForm.ActiveControl.Name
If Button = 1 Then 'Clic gauche
Set ctrlImg = Screen.ActiveForm.Controls(strButtonName & "Up")
'Coordonnées du centre du bouton:
X0 = Int(ctrlImg.Width / 2)
Y0 = Int(ctrlImg.Height / 2)
'(x-x0)²+(y-y0)²<=R² Equation du disque pour vérifier qu'on a bien cliqué dans le cercle et non dans les coins du bouton
If (X - X0) * (X - X0) + (Y - Y0) * (Y - Y0) <= X0 * X0 Then
ctrlImg.Visible = False
Set ctrlImg = Screen.ActiveForm.Controls(strButtonName & "Down")
ctrlImg.Visible = True
End If
Set ctrlImg = Nothing
End If
End Sub
L’événement « Sur souris relâchée » appelle la fonction suivante :
Public Function MANAGE_BUTTON_UP(Button As Integer, X As Single, Y As Single) As Boolean
Dim strButtonName As String
Dim ctrlImg As Control
Dim X0, Y0 As Integer
MANAGE_BUTTON_UP = False
strButtonName = Screen.ActiveForm.ActiveControl.Name
Set ctrlImg = Screen.ActiveForm.Controls(strButtonName & "Up")
If Button = 1 Then 'Clic gauche
'Coordonnées du centre du bouton:
X0 = Int(ctrlImg.Width / 2)
Y0 = Int(ctrlImg.Height / 2)
'(x-x0)²+(y-y0)²<=R² Equation du disque pour vérifier qu'on a bien cliqué dans le cercle et non dans les coins du bouton
If (X - X0) * (X - X0) + (Y - Y0) * (Y - Y0) <= X0 * X0 Then
MANAGE_BUTTON_UP = True
End If
End If
ctrlImg.Visible = True
Set ctrlImg = Screen.ActiveForm.Controls(strButtonName & "Down")
ctrlImg.Visible = False
Set ctrlImg = Nothing
End Function
Puissant 🙂