Emploi du copier, couper, coller avec des shortcut menus


Contenu du snippet

Bonjour

Je ne sais pas si, comme moi, vous avez rencontré quelques petits problèmes dans l'utilisation du Couper, ..., quand au préalable, vous aviez introduit un Shortcut correspondant dans un menu (via la générateur de menus - Ex. : Coller Ctrl + C )...

En bon néophyte, je programmais une gestion ClipBoard correspondante dans le Mnu[xxxx]_Click (ex. MnuColler_Click). Le résultat obtenu était systématiquement un doublon ! Personnellement je n'ai pas trouvé comment biaiser les automatismes de VB (ou plutôt je me suis refusé de faire appel à un WindowProc...)

Une possibilité : supprimer ces shortcut ? Même Wazcrack ne les a pas employé dans son Editeur de Texte avec coloration syntaxique (Est-ce un oubli de sa part ou volontaire ?)

En un mot ces ShortCut sont C....

Nous avons 2 cas de figure :

- Soit une action ClipBoard n'entraîne aucune conséquence sur votre programme
' Soit une action ClipBoard génère une conséquence sur votre programme. Par exemple mettre à jour un control "miroir" du control "actif" (personnellement j'ai besoin qu'un texte crypté réagisse en tandem avec un texte décrypté)

Dans le premier cas, il ne faut pas créer les sub "Mnu[xxxx]_Click

Dans le second cas, je vous propose une solution pour pouvoir les employer :

Puisque l'automatisme VB agit avant de laisser la main au control qui a le SetUp, et qu'il copie, coupe ou colle avant même que nous soyons dessus ... agissons au niveau du Form !

1- Mettre la propriété "KeyPreview" du form à TRUE ce qui implique que systématiquement les touches claviers seront gérées par au niveau du Form avant de l'être au niveau du control "actif" .

2- A travers un Form_KeyDown appelons la gestion "conséquence" désirée (voir exemple sur Form1_KeyDown)

Quand on tape "Ctrl + V", Form1_KeyDown appelle MnuColler_Click (voir exemples gestion des menus)

Source / Exemple :


Private Sub Form1_KeyDown(KeyCode As Integer, Shift As Integer)     'Lecture du code "clavier" pour gestion codes non traités par un "KeyPress" (ex. CTRL X)
    
    'Postulat :     la propriété "KeyPreview" du Form est mise à TRUE et Eventuellement certains menus ont un "ShortCut" activé (ex. : Couper   Ctrl + X)
    '               =>  La gestion des Ctrl, ..., est faite "automatiquement" par VB
    '                   Dans ce cas, il ne nous reste plus qu'à "gérer les conséquences" sur les "ShorCut" des menus concernés.
    '                   "Nous n'avons pas à programmer des actions ClipBoard" dans le menu concerné (Ex. : Mnu[xxxx]_Click) sinon => Doublon
    
    ValeurdeShift = Shift And 7     ' "And" Binaire
        
    Select Case ValeurdeShift       ' Gestion des combinaisons de touches.
        Case 1                      '   ... Combinaisons " MAJ + car. "  (MAJuscules)
        
        Case 2                      '   ... combinaisons " CTRL + car. "
            Select Case KeyCode
                Case vbKeyV
                    MnuColler_Click
                Case vbKeyC
                    LongueurSelection = Len(Clipboard.GetText)
                    MnuCopier_Click
                Case vbKeyX
                    MnuCouper_Click
            End Select  'KeyCode
            
        Case 3                      '   ... combinaisons " ALT + car. "
        
        Case 4                      '   ... combinaisons " MAJ + CTRL + car. "
        
        Case 5                      '   ... combinaisons " MAJ + ALT + car. "
        
        Case 6                      '   ... combinaisons " CTRL + ALT + car. "
        
        Case 7                      '   ... combinaisons " MAJ + CTRL + ALT + car. "
        
    End Select  'ValeurdeShift
    
End Sub 'Form1_KeyDown

Private Sub MnuColler_Click()   'ou Ctrl + V

    'Nous n'avons pas besoin de programmer l'action "Coller" du Clipboard, puisque nous avons choisi que celle-ci soit réalisée automatiquement par le système VB
    
    InsertionCaractereInterdite = True
    
    'conséquence sur EltTraduit

    CaractereATraduire = Clipboard.GetText()
    
    EltTraduit.SelStart = (PtInsertEltTraduit - Len(CaractereATraduire)) - 1
    EltTraduit.SelText = CryptePtr.Encrypter(CaractereATraduire)
    
    If Enregistrer.Enabled = False And Len(EltLu.Text) > 0 And Trim(EltLu.Text) <> "" Then Enregistrer.Enabled = True

End Sub 'MnuColler_Click

Private Sub MnuCopier_Click()   'ou Ctrl + C
     
    'Nous n'avons pas besoin de programmer l'action "Copier" du Clipboard, puisque nous avons choisi que celle-ci soit réalisée automatiquement par le système VB
    
    InsertionCaractereInterdite = True
   
End Sub 'MnuCopier_Click

Private Sub MnuCouper_Click()   ''ou Ctrl + X
    
    'Nous n'avons pas besoin de programmer l'action "Couper" du Clipboard, puisque nous avons choisi que celle-ci soit réalisée automatiquement par le système VB
    
    InsertionCaractereInterdite = True
    
    'conséquence sur EltTraduit
    EltTraduit.SelStart = PtInsertEltTraduit - 1
    EltTraduit.SelLength = Len(Clipboard.GetText)
    EltTraduit.SelText = ""
    
    If Enregistrer.Enabled = False And Len(EltLu.Text) > 0 And Trim(EltLu.Text) <> "" Then Enregistrer.Enabled = True
    
End Sub 'MnuCouper_Click

Conclusion :


Ce n'est pas la panacée, loin de là. Mais cela fonctionne correctement. Si cela peut servir à quelqu'un ...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.