FAQ VB.NETConsultez toutes les FAQ

Nombre d'auteurs : 36, nombre de questions : 239, dernière mise à jour : 24 mai 2015  Ajouter une question

 

Cette FAQ a été réalisée pour répondre aux questions les plus fréquemment posées sur le forum Développement DotNET

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle contient sont correctes. Les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci.

Sur ce, je vous souhaite une bonne lecture.


SommaireWinFormsRichTextBox (1)
précédent sommaire suivant
 

Personnaliser le caret (signe d'omission en français ou plus simplement le curseur du texte) d'un Textbox est relativement aisé. Dans le cas d'une Richtextbox, la taille des caractères variant, le caret est recréé à chaque action de peinture ou de déplacement au sein du texte.

Il convient donc, pour chacune de ces actions, de recréer le caret personnalisé en utilisant l'API CreateCaret et de l'afficher par l'API ShowCaret, car la Richtextbox n'expose pas de méthode de gestion de son caret.

En l'absence du focus (tester via la propriété focused), la création du caret ne doit cependant pas être effectuée, la position de celui-ci ne correspondant pas à une position au sein du control.

Dans le code suivant, le caret personnalisé correspond à une image placée dans les ressources du projet.

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Public Class RichTextBoxCustomCaret 
    Inherits RichTextBox 
  
    Dim hMenuImg As Long 
    Public Img As System.Drawing.Bitmap 
    Private Declare Function CreateCaret Lib "user32" (ByVal hwnd As Integer, ByVal hBitmap As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer 
    Private Declare Function ShowCaret Lib "user32" (ByVal hwnd As Integer) As Integer 
  
    Private Enum WM 
        WM_KEYDOWN = &H100 
        WM_KEYUP = &H101 
        WM_PAINT = &HF 
        WM_CAPTURECHANGED = &H215 
        WM_LBUTTONDOWN = &H201 
        WM_LBUTTONUP = &H202 
        WM_SETFOCUS = &H7 
    End Enum 
    Protected Overrides Sub WndProc(ByRef m As Message) 
  
        Select Case m.Msg 
            Case WM.WM_SETFOCUS 
                ' WM_SETFOCUS : le control prend le focus 
                MyBase.WndProc(m) 
                loadCaret() 
                Exit Sub 
  
            Case WM.WM_KEYDOWN, WM.WM_KEYUP, _ 
                WM.WM_PAINT, _ 
                WM.WM_CAPTURECHANGED, _ 
                WM.WM_LBUTTONDOWN, WM.WM_LBUTTONUP 
                ' WM_KEYDOWN , WM_KEYUP : pour les entrées clavier 
                ' WM_PAINT : pour le redessin  
                ' WM_CAPTURECHANGED : pour gérer l'entrée sur le rtb 
                ' WM_LBUTTONDOWN , WM_LBUTTONUP : clic gauche de la souris 
                ' WM_SETFOCUS : le control prend le focus 
                If Me.Focused Then 
                    MyBase.WndProc(m) 
                    loadCaret() 
                    Exit Sub 
                End If 
        End Select 
        MyBase.WndProc(m) 
    End Sub 
  
    Private Sub loadCaret() 
        Img = New Drawing.Bitmap(My.Resources.MyCatError) 
        Dim h As Integer = Me.Handle.ToInt32 
        CreateCaret(h, Img.GetHbitmap.ToInt32, 10, 10) 
        ShowCaret(h) 
    End Sub 
  
End Class

Mis à jour le 30 octobre 2013 Aspic olsimare

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Microsoft DotNET : Hinault Romaric -