Tuto : Gestion des MouseEvents au-dessus d'images

Forum pour partager vos connaissances et vos astuces Excel / VBA ...
Avatar du membre
waard
Contributeur
Contributeur
Messages : 391
Appréciations reçues : 7
Inscrit le : 9 février 2015
Version d'Excel : 2013, 2016, FR
Téléchargements : Mes applications

Message par waard » 7 mai 2017, 11:21

Hello, Hello, :D

:ordi2: Petit partage de tuto à la suite de mon appli. Jeu : Z Défense : Mission Hellfest 8) dispo sur le site.
::B- Le jeu gère des codes qui permettent de déplacer une image au-dessus d'une autre image et d'auto-sélectionner la cellule où se trouve la souris et ce tuto explique en détails le fonctionnement et l'organisation nécessaire pour y parvenir.
screen tuto events souris.jpg
Présentation tuto de gestion d'évents souris dans excel
:arrow: Le tuto, contient de quoi permettre de comprendre :
:?: > Comment capturer la position de la souris au-dessus d'une plage cellules et d'une image à l'aide de MouseMove.
:?: > Comment déplacer une image au-dessus d'une autre suivant l'emplacement du clic souris à l'aide de MouseDown.
:?: > Comment créer un petit RPG avec un pingouin, interagissant avec un décor
:shock:

:arrow: Voilà le tuto est dispo ici :
https://www.excel-pratique.com/fr/telec ... -no294.php


:arrow: Masterclass & Outils dans ce topic permettant aussi :
:?: > Gestion des clics des différents boutons de la souris
:?: > Outil d'export de table pour le calcul des position x,y de la souris au-dessus de la carte
:?: > Méthode pour animer un sprite comme dans un jeu courant



Bon codage ::D :wink:
Modifié en dernier par waard le 1 mars 2018, 14:48, modifié 3 fois.
"One and yet a mass"
COHENNY Tristan - Projet MYRMIDON
Avatar du membre
waard
Contributeur
Contributeur
Messages : 391
Appréciations reçues : 7
Inscrit le : 9 février 2015
Version d'Excel : 2013, 2016, FR
Téléchargements : Mes applications

Message par waard » 8 mai 2017, 22:06

Masterclass
logo1 tuto.jpg
logo1 tuto.jpg (25.04 Kio) Vu 530 fois
:III En complément, je proposerai ici des Masterclass & des outils sur des codes de gestion de souris toujours dans la thématique RPG. :)




:arrow: SOMMAIRE
1. MASTERCLASS : GESTION DU CLIC GAUCHE/DROIT SOURIS
2. OUTIL D'EXPORT TABLE POUR LE CALCUL TAILLES CELLULE ET GERER LES POS X;Y DE LA SOURIS
3. TUTO : ANIMER UN SPRITE AVEC UNE SPRITESHEET




:?: 1. MASTERCLASS : GESTION DU CLIC GAUCHE/DROIT SOURIS
screen tuto gestion clic souris.jpg
Présentation du fichier exemple sur la gestion du clic droit/gauche souris au-dessus d'une image
:arrow: Alors dans ce Masterclass, nous allons voir comment gérer les clics boutons de la souris, toujours en utilisant le principe de notre "ensemble" (cf tuto 1er post), à l'aide de l'événement MouseMove du Label.
MouseEvents gestion du clic souris dans MouseMove.xlsm
Exemple Procédure évent MouseMove gestion clic gauche ou droit
(191.24 Kio) Téléchargé 36 fois
VBA ne permet pas de base de capter les événements souris, mais Il est possible avec un contrôle Activex (entre autre) de capter les clics des boutons de la souris avec les événements : MouseMove ; MouseDown ; MouseUp ; Click ; DblClick.
* En suivant le lien DblClick, événement, vous verrez que ces événements agissent suivant un ordre (quand ceux-ci ne sont pas empêchés par des événements invalidant).

> Les événements Click et DblClick sont limités, leur fonction n'est que de capter le clic ou le double clic au-dessus du contrôleur, nous allons donc nous concentrer sur les autres événements qui de base gèrent cette info, ce qui simplifiera le codage.
Click, événement : https://msdn.microsoft.com/fr-fr/librar ... 64479.aspx
Label.DblClick, événement : https://msdn.microsoft.com/fr-fr/librar ... 45177.aspx

> Reste les événements MouseMove ; MouseDown ; MouseUp, ces événements ont la particularité d'avoir les mêmes paramètres, ceux-ci peuvent donc gérer les clics souris selon la nature des boutons et suivant leur principe d'événement.
::B- Dans le tuto par souci de simplification, les événements ont été compartimentés, l'événement MouseMove (déplacement souris) était utilisé pour gérer uniquement le déplacement du curseur au-dessus de l'ensemble et l'événement MouseDown (bouton appuyé) pour gérer le déplacement par clic du sprite.
Mais ici nous n'allons utiliser que l'événement MouseMove , cet événement est très puissant, en effet, on peut gérer à la fois la capture du mouvement de la souris, mais aussi les différents clic de la souris :shock: :D .
MouseMove, Événement : https://msdn.microsoft.com/fr-fr/librar ... 36610.aspx
MouseUp, Événement : https://msdn.microsoft.com/fr-fr/librar ... 97657.aspx
MouseDown, Événement : https://msdn.microsoft.com/fr-fr/librar ... 97358.aspx


:!: Sous procédure gérant spécifiquement l’appui des boutons de la souris
Syntaxe de l'événement MouseMove : expression.MouseMove(Button, Shift, X, Y)
:arrow: Button // Suivant la valeur renvoyé par le paramètre, il est possible de savoir si le bouton est relâché ou appuyé pour déclencher l'événement et en même temps savoir lequel est appuyé.
> Button = 0 => Aucun boutons de la souris appuyés
> Button = 1 => Bouton Gauche de la souris appuyé
> Button = 2 => Bouton Droit de la souris appuyé
> Button = 3 => Bouton Central de scrolling de la souris appuyé
:arrow: Shift // Permet de tester si les touches MAJ / CTRL / ALT sont appuyées
:arrow: X, Y // Permettent de capter la position en twips du curseur de la souris
::) Donc grâce au seul paramètre Button, nous pouvons savoir si un bouton est appuyé et si oui lequel.
Ce qui va permettre en utilisant un codage IF, de tester la valeur Button et de faire des actions spécifique, en fonction du clic gauche ou droit au dessus de notre "ensemble". :D

Exemple de procédure de gestion du clic gauche (entrer dans la cellule) et droit (montrer le menu contextuel) :

Code : Tout sélectionner

'-------------------------------------------------------------------------------------
'III. Gestion MouseMove au niveau du clic souris
    'Button = 0 => Aucun boutons de la souris appuyés
    'Button = 1 => Bouton Gauche de la souris appuyé
    'Button = 2 => Bouton Droit de la souris appuyé
    'Button = 3 => Bouton Central de la souris appuyé
    'En l'état du codage proposé, utiliser l'événement clic ici, empêchera d'utliser les événéments DbleClick / Click / MouseDown

    'Exemple code, avec codage gérant la variable 0 du bouton, sans gestion des OPTIONS clic souris
    If Button <> 0 Then 'Si bouton souris différent à aucuns boutons souris appuyé alors
        '-------------------------------------------------
        'Procédure pour éviter le bug de désactivation du mode transparent du label créant un flash long masquant la carte
        MAP.Visible = False 'désactiver l'affichage du label
        Application.ScreenUpdating = False 'désactiver raffraichissement de l'écran, on reste sur la dernière vision de l'utilisateur OK
        MAP.Visible = True 'rerendre label visible, réinitialise le mode transparent
        Application.ScreenUpdating = True 'réaffichage ok pour l'utilisateur
        '-------------------------------------------------
        If Button = 1 Then 'Si bouton gauche de la souris appuyé
            SendKeys "{F2}", False 'entrer dans la cellule, suivant version peut faire perdre verrNum
        End If
        '-------------------------------------------------
        If Button = 2 Then 'si bouton droit de la souris appuyé
            Application.CommandBars("Cell").ShowPopup 'Montrer le menu contextuel
        End If
        '-------------------------------------------------
    End If
    '-------------------------------------------------
Exemple de procédure complète de l'événement MouseMove, gérant à la fois le déplacement du curseur et de lancer une action spécifique suivant le clic gauche ou droit de la souris.
Suivant l'option choisie sur la feuille du classeur, le clic gauche ou droit de la souris donnera une action différente (soit 4 actions possibles) :
Clic gauche : Entrer dans la cellule Ou Afficher un message donnant l'emplacement de la souris
Clic droit : ouverture du menu contextuel Ou Afficher un message renvoyant la valeur à l'intérieur de la cellule

Code : Tout sélectionner

'Macro captant le mouvement et gérant les clics de la souris au dessus de la Map
'Explications que pour le point III. afin d'alléger le code
Private Sub MAP_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'-------------------------------------------------------------------------------------
Dim adress_curs, ancien_adress_curs As String
'-------------------------------------------------------------------------------------
On Error Resume Next
'-------------------------------------------------------------------------------------
'I. Auto-sélection cellule suivant position curseur souris
ThisWorkbook.Worksheets("Tab Calc Pos Souris").Range("POSX").Value = X
ThisWorkbook.Worksheets("Tab Calc Pos Souris").Range("POSY").Value = Y
adress_curs = ThisWorkbook.Worksheets("Tab Calc Pos Souris").Range("ADRESS_CURSEUR").Value
ThisWorkbook.ActiveSheet.Range(adress_curs).Select
'-------------------------------------------------------------------------------------
'II. Colorisation cellule sélectionnée
If ThisWorkbook.ActiveSheet.Range(adress_curs).Interior.ColorIndex = 2 Then
    If COLORCELLULE.Value = True Then ThisWorkbook.ActiveSheet.Range(adress_curs).Interior.ColorIndex = 42
    ancien_adress_curs = ThisWorkbook.Worksheets("Tab Calc Pos Souris").Range("ANCIEN_ADRESS_CURSEUR").Value
    ThisWorkbook.ActiveSheet.Range(ancien_adress_curs).Interior.ColorIndex = 2
    ThisWorkbook.Worksheets("Tab Calc Pos Souris").Range("ANCIEN_ADRESS_CURSEUR").Value = adress_curs
End If
'-------------------------------------------------------------------------------------


    
'-------------------------------------------------------------------------------------
'III. Gestion MouseMove au niveau du clic souris
    'Button = 0 => Aucun boutons de la souris appuyés
    'Button = 1 => Bouton Gauche de la souris appuyé
    'Button = 2 => Bouton Droit de la souris appuyé
    'Button = 3 => Bouton Central de la souris appuyé
    'En l'état du codage proposé, utiliser l'événement clic ici, empêchera d'utliser les événéments DbleClick / Click / MouseDown

    'Exemple code, avec codage gérant la variable 0 du bouton, avec gestion des OPTIONS clic souris
    If Button <> 0 Then 'Si bouton souris différent à aucuns boutons souris appuyé alors
        '-------------------------------------------------
        'Procédure pour éviter le bug de désactivation du mode transparent du label créant un flash long masquant la carte
        MAP.Visible = False 'désactiver l'affichage du label
        Application.ScreenUpdating = False 'désactiver raffraichissement de l'écran, on reste sur la dernière vision de l'utilisateur OK
        MAP.Visible = True 'rerendre label visible, réinitialise le mode transparent
        Application.ScreenUpdating = True 'réaffichage ok pour l'utilisateur
        '-------------------------------------------------
        If Button = 1 Then 'Si bouton gauche de la souris appuyé et suivant option sélectionné d'événement clic
            If OPTION_BOUTGAUCHE.Value = False Then MsgBox "Le curseur se trouve au-dessus de la cellule : " & adress_curs, vbInformation, "Evénement clic gauche" 'Afficher un message avec l'adresse de la cellule
            If OPTION_BOUTGAUCHE.Value = True Then SendKeys "{F2}", False 'entrer dans la cellule, suivant version peut faire perdre verrNum
        End If
        '-------------------------------------------------
        If Button = 2 Then 'si bouton droit de la souris appuyé et suivant option sélectionné d'événement clic
            If OPTION_BOUTDROIT.Value = False Then Application.CommandBars("Cell").ShowPopup 'Montrer le menu contextuel
            If OPTION_BOUTDROIT.Value = True Then MsgBox "La cellule contient le texte suivant : " & ThisWorkbook.ActiveSheet.Range(adress_curs).Value, vbInformation, "Evénement clic droit" 'Afficher un message avec le contenu de la cellule
        End If
        '-------------------------------------------------
    End If
    '-------------------------------------------------
    
    
    
    
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    'Exemple code, avec codage gérant la variable 0 du bouton, sans gestion des OPTIONS clic souris
    'If Button <> 0 Then 'Si bouton souris différent à aucuns boutons souris appuyé alors
        '-------------------------------------------------
        'Procédure pour éviter le bug de désactivation du mode transparent du label créant un flash long masquant la carte
        'MAP.Visible = False 'désactiver l'affichage du label
        'Application.ScreenUpdating = False 'désactiver raffraichissement de l'écran, on reste sur la dernière vision de l'utilisateur OK
        'MAP.Visible = True 'rerendre label visible, réinitialise le mode transparent
        'Application.ScreenUpdating = True 'réaffichage ok pour l'utilisateur
        '-------------------------------------------------
        'If Button = 1 Then 'Si bouton gauche de la souris appuyé
            'SendKeys "{F2}", False 'entrer dans la cellule, suivant version peut faire perdre verrNum
        'End If
        '-------------------------------------------------
        'If Button = 2 Then 'si bouton droit de la souris appuyé
            'Application.CommandBars("Cell").ShowPopup 'Montrer le menu contextuel
        'End If
        '-------------------------------------------------
    'End If
    '-------------------------------------------------
    
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    'Exemple code, avec codage sans variable 0 du bouton, sans gestion des OPTIONS clic souris
    'If Button = 1 Or Button = 2 Then 'Si bouton souris égal boutons souris gauche ou droit appuyé alors
        '-------------------------------------------------
        'Procédure pour éviter le bug de désactivation du mode transparent du label créant un flash long masquant la carte
        'MAP.Visible = False 'désactiver l'affichage du label
        'Application.ScreenUpdating = False 'désactiver raffraichissement de l'écran, on reste sur la dernière vision de l'utilisateur OK
        'MAP.Visible = True 'rerendre label visible, réinitialise le mode transparent
        'Application.ScreenUpdating = True 'réaffichage ok pour l'utilisateur
        '-------------------------------------------------
        'If Button = 1 Then SendKeys "{F2}", False 'entrer dans la cellule, suivant version peut faire perdre verrNum
        '-------------------------------------------------
        'If Button = 2 Then Application.CommandBars("Cell").ShowPopup 'Montrer le menu contextuel 'si bouton droit de la souris appuyé
        '-------------------------------------------------
    'End If
    '-------------------------------------------------

'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


End Sub
::D FIN du Masterclass et voilà maintenant la souris peut faire plusieurs actions au dessus de l'ensemble. :wink:






:?: 2. OUTIL D'EXPORT TABLE POUR LE CALCUL TAILLES CELLULE ET GERER LES POS X;Y DE LA SOURIS
Outil d'export table tailles pixels pour calcul x,y déplacement souris.xlsm
Outil de création auto de table en lien avec le tuto Comment gérer des événements souris VBA
(182.58 Kio) Téléchargé 21 fois




:?: 3. TUTO: COMMENT ANIMER UN SPRITE AVEC UNE SPRITESHEET
Partage d'un tuto dans le thème du pingouin et de la programmation de jeu, sur une méthode pour animer un sprite pingouin à l'aide d'une feuille à sprite ici : https://www.excel-pratique.com/fr/telec ... -no330.php
Avec vous pouvez reproduire une animation de mouvement et extrapoler la méthode pour faire d'autres types d'animations.

:wink:
"One and yet a mass"
COHENNY Tristan - Projet MYRMIDON
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message