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 ...
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.