Zone de texte : menu contextuel personnalisé sur clic droit

Description

Lors du clic droit sur une zone de texte, le menu contextuel spécifique à une zone de texte (Copier, Coller, ...) s'affiche automatiquement.
Si vous voulez afficher votre propre menu contextuel sur clic droit, le menu spécifique s'affiche d'abord et votre propre menu contextuel ne s'affichera qu'au deuxième clic droit. Inconfortable...
Pour empêcher l'affichage du menu contextuel spécifique, il faut que la propriété "Enabled" de la zone de texte soit mise à "False".
Mais alors, le contenu de la zone de texte apparaît en grisé.
Pour empêcher cela, utilisez l'API "LockWindowUpdate".
Puis remettez la propriété "Enabled" de la zone de texte à "True" et le tour est joué: votre menu contextuel personnalisé s'affichera sur un unique clic droit.

Source / Exemple :


Extrait de code: ...

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, _
                            X As Single, Y As Single)
                            
    If Button = vbRightButton Then
        'Evite le texte grisé lors du passage à "disabled" en bloquant
        'l'update de la zone de texte (voir l'API LockWindowUpdate).
        LockWindowUpdate Text1.hWnd
        'Une zone de texte "disabled" n'affichera pas le menu contextuel
        Text1.Enabled = False
        'Donne le temps à la ligne précédente de terminer son processus
        DoEvents
        'Affiche mon menu contextuel
        PopupMenu mnuFichiers, , , , mnuOuvrir
        'Remet "enabled" la zone de texte
        Text1.Enabled = True
        'Débloque l'update (voir l'API LockWindowUpdate)
        LockWindowUpdate 0&
    End If
    
End Sub

Private Sub Text2_MouseDown(Button As Integer, Shift As Integer, _
                            X As Single, Y As Single)
    If Button = 2 Then PopupMenu mnuFichiers, , , , mnuOuvrir
End Sub

Conclusion :


J'avais besoin de cette fonction pour une application particulière sur une zone de texte et une liste. Pour la liste, ça ne posait pas de problème; par contre, pour la zone de texte, ça marchait mal (besoin de 2 clics droits pour afficher mon menu contextuel). Je n'ai pas trouvé de code gérant ce problème sur Codes-Sources. Alors j'ai mis en place ce système qui marche bien. S'il y a des solutions plus simples ou différentes, je suis preneur. Par contre, si ça peut rendre service à l'un ou l'autre, c'est encore mieux.

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.