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

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

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.