Popup menu complet pour richtextbox (copier,coller,etc...)

Soyez le premier à donner votre avis sur cette source.

Vue 12 310 fois - Téléchargée 1 437 fois

Description

Un inconvenient du RichTextBox est qu'il n'y a pas de menu avec le click droit de la souris. Au début j'avais recréer les fonction copier , coller , couper , etc... , mais j'ai ensuite eu l'idée d'utiliser SendKeys pour appeller les raccourcis clavier de Windows (CTRL+ C , CTRL + V , etc...). De cette maniére les fonctions windows sont employés et le menu reagit exactement pareil que tout autre application , ce qui ne perturberat pas l'utilisateur final ;)
Le menu du click droit fonctionne exactement pareil que celui du TextBox classique.

Source / Exemple :


Private Sub mnuPopup_Click(Index As Integer)

' Le menu utilisé pour le popup est un groupe de controle ,
' on recupère l'index pour assigner une commande au menu.
' En utilisant SendKeys , on evite de programmer les fonctions
' de copier - coller en utlisant les raccourci clavier
' (CTRL + C , CTRL + V , etc...)
'
' Pour rappel : CTRL + Z = Annuler
'               CTRL + X = Couper
'               CTRL + C = Copier
'               CTRL + V = Coller
'               CTRL + A = Selectionner tout

Select Case Index
   Case 0
      SendKeys "^(z)"       ' le ^ signifie la touche CTRL
   Case 1
      ' Separateur          ' pour pouvoir indexer le menu , il faut que les menus indéxés
   Case 2                   ' doit aussi indexer les separateurs soit consecutifs, donc on
      SendKeys "^(x)"
   Case 3
      SendKeys "^(c)"
   Case 4
      SendKeys "^(v)"
   Case 5
      SendKeys "{DEL}"      ' ici c'est la touche SUPPR
   Case 6
      ' Separateur
   Case 7
      SendKeys "^(a)"
End Select

End Sub

Private Sub RichTextBox1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)

' Ici on met Enabled sur True ou False selon l'etat du RichtTextBox
' On active le menu Copier si du texte est selectionné , etc....
'
' Pour que le popup s'affiche sur n'importe quel RichTextBox ,
' ils doivent tous faire partie de meme groupe de controles

With RichTextBox1(Index)
   mnuPopup(0).Enabled = True
   mnuPopup(2).Enabled = IIf(.SelLength > 0, True, False)
   mnuPopup(3).Enabled = IIf(.SelLength > 0, True, False)
   mnuPopup(4).Enabled = IIf(Clipboard.GetText <> "", True, False)
   mnuPopup(5).Enabled = IIf(.SelLength > 0, True, False)
   mnuPopup(7).Enabled = IIf(Len(.Text) > 0, True, False)
   If .Locked = True Then
      mnuPopup(0).Enabled = False
      mnuPopup(2).Enabled = False
      mnuPopup(4).Enabled = False
      mnuPopup(5).Enabled = False
   End If
End With

' Et on affiche le menu si le clik droit est selectionné

If Button = 2 Then
   PopupMenu mnuRichTextBox
End If

End Sub

Conclusion :


Pour rendre tout ca encore plus beau , utilisez l'OCX de NoFutur pour les menus au look XP (les 2 popup du bas dans la capture d'écran)
>> http://www.vbfrance.com/code.aspx?id=16924

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_max12
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014
-
Il existe, il faut le cocher dans les propriétés, je sais plus laquel. Mais il est en anglais par contre.

A+
cs_Danyz
Messages postés
98
Date d'inscription
dimanche 20 juillet 2003
Statut
Membre
Dernière intervention
31 octobre 2006
-
ha.... je ne le savais pas
bouv
Messages postés
1429
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Juste un petit repproche.
Au lieu de
SendKeys "^(c)"
j'aurais préféré
Clipboard.SetText (RichTextBox1.SelText)
Et pour récupérer la valeur
Clipboard.GetText

C'est beaucoup plus propre que des SendKeys.

Bonne prog
++
cs_Danyz
Messages postés
98
Date d'inscription
dimanche 20 juillet 2003
Statut
Membre
Dernière intervention
31 octobre 2006
-
En effet, la propriété AutoVerbMenu du RichTextBox doit etre sur True pour afficher le menu contextuel du click droit , j'avais pas vu ca :(
(D'aillleurs le menu est en francais...)

Ma source perde de son interet :P (si ce n'est de pouvoir modifier le menu contextuel)

Bouv j'ai utiliser les SendKeys aussi pour le presse papier pour mettre le moins de code possible.
Quand tu fait un coller par exemple , il faut prendre en compte l'emplacement du curseur , donc decouper la chaine de caractere du richtextbox , inserer le presse papier , si du texte etait selectionné , il faut le remplacer par le presse papier etc...
Tout ca est fait automatiquement en faisant un CTRL + V.
Pour le copier on peut à la limite metttre un clipboard.settext
bouv
Messages postés
1429
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
oui je sais c'est un peu plus complexe. Enfin c'est une opinion perso mais quand je peux eviter les sendkeys je le fait.
Sinon c'est pas mal.

Bonne prog
++

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.