Emploi du copier, couper, coller avec des shortcut menus

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 427 fois - Téléchargée 34 fois


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

Ajouter un commentaire

Commentaires

ridamax
Messages postés
1
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
10 mars 2008
-
merci mon frére mé j'ai un problém est ce que cet code peux servire aussi MainMenu merci
ldx
Messages postés
23
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
3 mai 2005
-
Merci. Je vais m'empresser de l'utiliser
cs_Cocalight
Messages postés
5
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
9 septembre 2005
-
Hum, tu aurais pu faire plus simple.

Gestion du Copier, coller, couper au chargement de ta fenetre :

Private Sub Form_Load()
Dim i As Integer
mnuPressePapier(0).Caption = "&Couper"
Load mnuPressePapier(1)
mnuPressePapier(1).Caption = "Co&pier"
Load mnuPressePapier(2)
mnuPressePapier(2).Caption = "C&oller"
mnuFermer.Enabled = False
mnuEnregistrer.Enabled = False

For i = 0 To 2
mnuPressePapier(i).Enabled = False
Next
End Sub

Gestion du Clipboard :

Private Sub mnuPressePapier_Click(Index As Integer)
Select Case Index
Case 0 'Couper
Clipboard.SetText txtEdition.SelText
txtEdition.SelText = ""
Case 1 'Copier
Clipboard.SetText txtEdition.SelText
Case 2 'Coller
txtEdition.SelText = Clipboard.GetText()
End Select
End Sub

Controle de tes boutons du menu :

Private Sub Toolbar_ButtonClick(ByVal Button As ComctlLib.Button)
Select Case Button.Key
Case "Ouvrir"
mnuBDOuvrir_Click
Case "Enregistrer"
mnuEnregistrer_Click
Case "Couper"
mnuPressePapier_Click (0)
Case "Copier"
mnuPressePapier_Click (1)
Case "Coller"
mnuPressePapier_Click (2)
End Select
End Sub

Je n'ais pas mis tout le code ici mais j'espere que ce seras utile


( je suis pas un pro VB et c'est mon premier post ;)

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.