Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Animations amplifiées
A l'occasion d'une astuce Access, nous avions appris à créer de légers effets d'animation en changeant la
couleur des boutons au survol de la souris . Ici, nous souhaitons aller plus loin par le
code VBA Access pour leur donner aussi un peu de hauteur, un peu de relief.
C'est ce qu'illustre l'exemple finalisé présenté par la capture.
Au survol de la souris sur un bouton , en plus du changement de ses couleurs, un
effet d'ombre portée lui est appliqué. Et nous allons le voir, c'est une fameuse astuce qui permet de produire ces effets, en toute simplicité.
Base de données Access à télécharger
Nous suggérons d'appuyer le développement sur un formulaire accueillant déjà des boutons.
Télécharger le fichier compressé effets-boutons.rar en cliquant sur ce lien ,
Le décompresser dans le dossier de votre choix,
Double cliquer sur le fichier résultant pour l'ouvrir dans Access ,
Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
Dans le volet de navigation, double cliquer sur le formulaire fQuestions pour l'ouvrir,
Si vous passez la souris au-dessus de l'un des boutons, vous remarquez qu'il change automatiquement de couleurs (texte et fond) pour indiquer qu'il est prêt à agir. Il s'agit des réglages que nous avons récupérés à partir de l'astuce que nous avons évoquée précédemment. Nous proposons de le constater.
A gauche du ruban Acceuil, cliquer sur la flèche du bouton Affichage ,
Dans les propositions, choisir le mode Création ,
Sur le formulaire en conception, cliquer sur le bouton Exporter pour le sélectionner,
Sur la droite de la fenêtre, activer l'onglet Format de sa feuille de propriétés ,
Comme vous le constatez, ce sont les attributs
Couleur sélectionnée par pointage et
Couleur texte sélectionnée par pointage qui sont paramétrés pour ainsi faire varier l'apparence des boutons au passage de la souris. Par contre, l'effet de relief par l'illusion d'une ombre portée n'existe pas encore. En revanche, des "outils" sont déjà en place.
En effet, si vous déplacez l'un ou l'autre bouton, ou encore les deux, vous remarquez qu'ils sont doublés en arrière-plan avec une couleur sombre. Ces doublures obscures portent les mêmes noms respectifs avec en suffixe le chiffre 2. Nous les utiliserons comme repères pour effectuer les déplacements et les replacements sur les positions d'origine lorsque la souris quittera la zone d'influence. Bien sûr et si vous avez réalisé la manipulation, il convient de replacer les boutons sur leurs compères de manière à les masquer complètement.
La fonction d'animation
Nous devons commencer par créer la fonction devant réaliser ces
effets de relief . Elle doit pouvoir être appelée au survol de chacun des boutons ou encore au survol du formulaire pour la réinitialisation sur les positions d'origine. Elle doit donc attendre trois paramètres, puisque nous allons la coder dans un module indépendant. Il s'agit du
formulaire parent , du
nom du contrôle survolé et du
mode , soit de l'action à entreprendre :
Déplacer ou
Replacer ?
Dans le volet de navigation sur la gauche, double cliquer sur l'élément Module1 ,
Ainsi, nous affichons sa feuille de code au centre de l'écran.
Dans cette feuille de code, créer la fonction animer , comme suit :
Function animer(F As String, leBtn As String, mode As Byte)
End Function
Nous typons les deux premiers paramètres comme des textes (As String) puisque nous attendons le
nom du formulaire et le
nom du bouton à piloter sur ce dernier. Puis, nous typons le dernier argument comme un
entier court (As Byte). C'est en effet un
indicateur numérique qui nous permettra de savoir si le bouton cible, doit être déplacé ou replacé.
Le formulaire
Pour que le
code VBA soit en mesure d'atteindre les
contrôles du formulaire , nous devons représenter ce dernier par un
objet précis .
Dans les bornes de la fonction, ajouter la déclaration et l'affectation suivantes :
...
Dim leForm As Form
Set leForm = Forms(F)
...
Nous déclarons donc l'
objet leForm que nous typons comme un
formulaire (As Form). C'est ainsi que nous l'initialisons (Set) ensuite sur le formulaire dont le nom est passé en premier argument de la fonction (F), grâce à la
collection Forms .
L'action à entreprendre
L'
action à entreprendre sur le
bouton passé en deuxième argument dépend de la
valeur de l'indicateur passé en troisième paramètre. Nous devons donc tester cette information avec une
instruction conditionnelle .
A la suite du code, créer l'instruction conditionnelle suivante :
...
If mode = 1 Then
ElseIf mode = 0 Then
End If
...
Arbitrairement, nous décidons que la valeur 1 doit engager un
déplacement tandis que la valeur 0 doit engager un
replacement .
Déplacer le bouton
Pour obtenir l'effet de hauteur escompté, en même temps que nous devons déplacer le bouton à l'horizontale, nous devons le faire bouger à la verticale. Pour cela, il suffit d'influer sur les
propriétés Left et Top du contrôle. Et pour optimiser le code, nous proposons d'énumérer les propriétés du bouton dans un
bloc With .
Dans la première branche de l'instruction conditionnelle, créer le bloc With suivant :
...
If mode = 1 Then
With leForm.Controls(leBtn)
.Left = leForm.Controls(leBtn & "2").Left - 150
.Top = leForm.Controls(leBtn & "2").Top - 150
.FontWeight = 700
End With
ElseIf mode = 0 Then
...
A l'horizontale, nous effectuons un décalage de 150 points vers la gauche (Left) par rapport à la position d'origine du bouton, qui est connue grâce à son jumeau (leBtn & "2"). A la verticale, nous réalisons un déplacement de 150 points vers le haut (Top), là aussi par rapport à la position d'origine du bouton. Puis, nous forçons le trait de la police grâce à la
propriété FontWeight .
Replacer le bouton
Dans le cas contraire (ElseIf), il suffit simplement de recalibrer les propriétés sur celles qui n'ont pas bougé et qui sont renseignées par le jumeau du bouton désigné en deuxième paramètre de la fonction.
Dans la seconde branche de l'instruction conditionnelle, créer le bloc With suivant :
...
ElseIf mode = 0 Then
With leForm.Controls(leBtn)
.Left = leForm.Controls(leBtn & "2").Left
.Top = leForm.Controls(leBtn & "2").Top
.FontWeight = 400
End With
End If
...
Nous réinitialisons donc les positions ainsi que le trait de police.
Déplacer et replacer
Il ne nous reste plus qu'Ã appeler cette fonction aux moments opportuns, soit au
survol de chaque bouton , mais aussi au
survol de la zone du formulaire . Les modes d'appel doivent naturellement être différents selon qu'il est question d'organiser un
déplacement ou un
repositionnement .
Enregistrer les modifications (CTRL + S) et revenir sur le formulaire en conception (ALT + Tab),
Cliquer sur le premier bouton (Exporter) pour le sélectionner,
Activer l'onglet Evénement de sa feuille de propriétés ,
Cliquer sur le petit bouton associé à son événement Sur souris déplacée ,
Dans la boîte de dialogue, choisir le Générateur de code et valider par Ok,
Nous revenons dans l'
éditeur VBA Access , entre les bornes de la
procédure événementielle exporter_MouseMove qui est écrite dans la feuille de code du formulaire et non dans un module, comme c'est le cas pour notre fonction.
Dans les bornes de cette procédure, ajouter la ligne de code suivante :
Private Sub exporter_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If exporter.Left = exporter2.Left Then animer Me.Name, "exporter", 1
End Sub
Nous n'engageons l'appel de la
fonction animer que dans la mesure où le bouton est sur sa position d'origine (exporter.Left = exporter2.Left). Nous lui passons le nom du formulaire (Me.Name), le nom du bouton à bouger et le mode 1 pour le déplacement.
En haut de la feuille de code, déployer la liste déroulante de gauche,
Dans les propositions, choisir le contrôle fermer ,
Dès lors, déployer la liste déroulante de droite,
Dans les propositions, choisir l'événement associé MouseMove ,
C'est ainsi que nous créons la
procédure événementielle fermer_MouseMove . De fait, la précédente (fermer_Click) peut être supprimée. Elle a automatiquement été créée lorsque nous avons réalisé le premier choix.
Dans les bornes de cette nouvelle procédure, ajouter la ligne VBA suivante :
Private Sub fermer_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If fermer.Left = fermer2.Left Then animer Me.Name, "fermer", 1
End Sub
Le principe est le même mais l'analyse porte désormais sur le second bouton.
Il ne nous reste plus qu'Ã organiser le
repositionnement du bouton déplacé dès qu'un
mouvement de la souris est détecté
au-dessus de la zone du formulaire . Ainsi, nous saurons que la souris a quitté la zone d'influence du bouton. Cette zone du formulaire est reconnue par le
nom d'objet Détail .
En haut de l'éditeur, déployer la liste déroulante de gauche,
Dans les propositions, choisir l'objet Détail ,
Déployer alors la liste déroulante de droite,
Dans les propositions, choisir l'événement associé MouseMove ,
C'est ainsi que nous créons la
procédure événementielle Détail_MouseMove et que la précédente (Détail_Click) peut être supprimée.
Dans les bornes de cette nouvelle procédure, ajouter les deux lignes VBA suivantes :
Private Sub Détail_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If exporter.Left <> exporter2.Left Then animer Me.Name, "exporter", 0
If fermer.Left <> fermer2.Left Then animer Me.Name, "fermer", 0
End Sub
Nous appelons deux fois la fonction animer avec un mode inversé (0). Mais ces appels n'ont lieu que dans la mesure où les boutons ne sont pas déjà sur leurs positions d'origine, en d'autres termes qu'ils sont bien sous le coup d'un déplacement (exporter.Left <> exporter2.Left et fermer.Left <> fermer2.Left).
Tester les effets d'animation
Il ne nous reste plus qu'Ã tester ces
effets d'animation régis par le
code VBA Access .
Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
Exécuter ce dernier, par exemple avec la touche F5 du clavier,
Désormais et comme vous pouvez l'apprécier, dès que vous survolez un bouton, celui-ci prend de la hauteur. Et dès que vous quittez sa zone d'influence, il se range sur sa position d'origine.